漏洞扫描udp端口扫描模块
while (1)
{
sockServer = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
SOCKADDR_IN addrServer;
addrServer.sin_addr.S_un.S_addr = htonl(INADDR_ANY);
//addrServer.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
addrServer.sin_family = AF_INET;
addrServer.sin_port = htons(port);
port++;
bind(sockServer, (SOCKADDR *)&addrServer, sizeof(addrServer));
// 此sockaddr用于保存远程客户端的地址
SOCKADDR_IN addrClient1;
int len = sizeof(SOCKADDR);
// recvBuf用于保存从客户端client所接收的数据
char recvBuf[150] = "";
memset(recvBuf, NULL, sizeof(recvBuf));
int recvlen = recvfrom(sockServer, recvBuf, 150, 0, (struct sockaddr *)&addrClient1, &len);
// 定义ip头以及udp报头变量以便方便操作报头中的数据
ip_header *ip;
udp_header *udp;
ip = (ip_header *)recvBuf;
udp = (udp_header *)(recvBuf + (ip->header_length << 2));
printf("recvfrom()函数返回的长度:%d recvBuf第12、13、14、15、16、17、18、19个位置元素: %d.%d.%d.%d %d.%d.%d.%d 接收到的数据:%s\n",
recvlen, recvBuf[12], recvBuf[13], recvBuf[14], recvBuf[15], recvBuf[16], recvBuf[17], recvBuf[18], recvBuf[19], recvBuf+28);
printf("远程地址:%s 远程端口号:%d\n", inet_ntoa(addrClient1.sin_addr), ntohs(addrClient1.sin_port));
....................
客户端也是在同一主机上
当创建socket时的参数为SOCK_RAW时,ntohs(addrClient1.sin_port)最后返回的远程端口号总是为0 ,
但参数为SOCK_DGRAM时,ntohs(addrClient1.sin_port)返回的远程端口号却是正确的,
所以想问下该怎么做才能使SOCK_RAW下,ntohs(addrClient1.sin_port)的值是正确的????????????????