我有一个服务器与几个不同的IP地址。此时,每个IP都可以收到一个UDP请求,但它总是与请求者不喜欢的回复相同的IP。动态更改源IP地址
为了使长话短说,这是所有的基本代码:
int sock;
socklen_t clilen;
struct sockaddr_in serv_addr, cli_addr;
memset((char*)&serv_addr, 0, sizeof(serv_addr));
sock = socket(AF_INET, SOCK_DGRAM, 0);
serv_addr.sin_family = AF_INET;
serv_addr.sin_addr.s_addr = htonl(INADDR_ANY);
serv_addr.sin_port = htons(PORT);
...
recvfrom(sock, buffer, BUFLEN, 0, (struct sockaddr *)&cli_addr, &clilen);
...
sendto(sock, resData, resLen, 0, (struct sockaddr *)&cli_addr, sizeof(cli_addr));
我希望能够以某种方式指定IP用于发送回我的包(这可以为每个不同和每个请求),但我不知道如何以及如果这甚至可以使用套接字来完成。我在这个领域并不是那么有经验,所以我能得到的所有帮助都非常感谢。
编辑下面
我发现在这里接受的答案潜在的解决方案:How to re bind a udp socket in Linux
然而,新的问题出现了。我如何知道哪个IP /接口收到了请求?这样我可以使用该IP /接口进行响应。
你的问题还不清楚。你的机器上有多个接口,并且你想每次都从不同的接口发送。或者你想欺骗IP地址到虚假的IP地址? – Salgar
我有多个接口,我不想欺骗。 – user2215771