我有一個服務器與幾個不同的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