1
내 기능은 현재 올바르게 작동하지만 서버의 주 IP 주소에서 다른 기능을 사용하지 않고 보내고 있습니다. 나는 그것을에서 패킷을 보낼 그러나이 내 기본 서버에서 IP를 호출 할 수 있습니다 포트 1900, w 변수에 패킷을 전송소켓 sendto()에서 소스 IP 변경
void *sendpacket(void *par1)
{
running_threads++;
int thread_id = (int)par1;
unsigned long start_ip = htonl(ntohl(start)+(per_thread*thread_id));
unsigned long end = htonl(ntohl(start)+(per_thread*(thread_id+1)));
unsigned long w;
int y;
unsigned char buf[65536];
strcpy(buf, "M-SEARCH * HTTP/1.1\r\nHost:239.255.255.250:1900\r\nST:ssdp:all\r\nMan:\"ssdp:discover\"\r\nMX:3\r\n\r\n");
int sizeofpayload = 90;
int sock;
if((sock=socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP))<0) {
perror("cant open socket");
exit(-1);
}
for(w=ntohl(start_ip);w<htonl(end);w++)
{
struct sockaddr_in servaddr;
bzero(&servaddr, sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_addr.s_addr=htonl(w);
servaddr.sin_port=htons(1900);
sendto(sock,(char *)buf,sizeofpayload,0, (struct sockaddr *)&servaddr,sizeof(servaddr));
bytes_sent+=sizeofpayload;
scanned++;
hosts_done++;
usleep(sleep_between*1000);
}
close(sock);
running_threads--;
return;
}
192.168.0.1 : 여기
코드의 조각이다 192.168.1.1 그래서 다른 주소로 스푸핑하기 위해 UDP 패킷을 위조하십시오.servaddr.sin_addr.s_addr=htonl(w);
대상 주소를 처리하지만 원본 IP 주소를 편집하는 데 어려움을 겪고 있습니다.
원시 소켓이 필요하다고 생각합니다. – edmz
참고 :'bytes_sent + = sizeofpayload; 당신은 sento()의 리턴 값을 가져야한다. – wildplasser
적절한 오류 처리가 필요합니다. 예를 들어,'sendto()'가 -1을 반환하면 전혀 바이트를 보내지 않았다. – EJP