다른 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 주소를 스푸핑하고 싶습니까? – Salgar
여러 개의 인터페이스가 있는데 스푸핑하고 싶지 않습니다. – user2215771