C, Eclipse, Ubuntu 12.04에서 코드를 작성하고 있습니다. 소켓을 열고 스푸핑 된 소스 IP에서 UDP 패킷을 보내고 있습니다. 가상 머신 (동일한 코드, 이클립스, 우분투 버전)에서 코드를 실행하면 모든 것이 정상이지만 지금은 실제 우분투 컴퓨터에서 실행하려고하면 제대로 작동하지 않습니다.C가 위장 된 IP로 UDP 패킷을 보낼 때 IP가 바뀌고 있습니다. Ubuntu 12.04
bzero(&spoof_addr, sizeof(spoof_addr));
spoof_addr.sin_family = AF_INET;
spoof_addr.sin_port = htons(SERVERPORT);
if (inet_aton("192.168.160.240", &spoof_addr.sin_addr)==0)
{
fprintf(stderr, "inet_aton() failed\n");
exit(1);
}
if ((sockfd_spoofed = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP))==-1)
err("socket");
bind(sockfd_spoofed,(struct sockaddr*)&spoof_addr,sizeof(spoof_addr));
//Send the packet
if (sendto(sockfd_spoofed, buf_port, 5, 0, (struct sockaddr*)&dest_addr, sizeof(dest_addr))==-1)
문제는 우분투/커널이 내 소스 IP를 유일한 인터페이스의 실제 IP로 변경한다는 것입니다. Eclipse는 오류나 경고없이 실행됩니다. 따라서 패킷이 Eclipse 애플리케이션을 떠난 후에 IP가 변경되고 있음을 이해합니다. 다음과 같이 추가 IP를 추가하려고 시도했습니다. ifconfig eth0 : 1 192.168.160.240 넷 마스크 255.255.255.0 (가상 컴퓨터에서 작동)이지만 실제 PC에는 영향을주지 않습니다.
고맙습니다. 당신 말이 맞아요. 이제 원시 소켓을 사용하고 작동합니다. 가상 머신에서 작동하는 것이 이상합니다. – Larisa
@ yel이 답변을 귀하의 질문에, 나는 upvote 주셔서 감사 드리며 만약 당신이 대답을 옆에있는 확인란을 그것을 받아 들일 것입니다. 이것은 또한 다른 사람들이 앞으로이 문제를 볼 때 이것이이 문제에 대한 해답임을 알게 될 것입니다. – xaxxon