漏洞扫描udp端口扫描模块

baidu_20959169 2016-06-02 11:03:20
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)的值是正确的????????????????



...全文
152 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2016-06-02
  • 打赏
  • 举报
回复
引用 1 楼 baidu_20959169 的回复:
当sockServer = socket(AF_INET, SOCK_RAW, IPPROTO_UDP); 参数为SOCK_RAW时,ntohs(addrClient1.sin_port)返回的远程端口号总是为0 ?为什么?
坊间传闻:Win7及以上操作系统限制使用SOCK_RAW
baidu_20959169 2016-06-02
  • 打赏
  • 举报
回复
当sockServer = socket(AF_INET, SOCK_RAW, IPPROTO_UDP); 参数为SOCK_RAW时,ntohs(addrClient1.sin_port)返回的远程端口号总是为0 ?为什么?
baidu_20959169 2016-06-02
  • 打赏
  • 举报
回复
引用 2 楼 zhao4zhong1 的回复:
[quote=引用 1 楼 baidu_20959169 的回复:] 当sockServer = socket(AF_INET, SOCK_RAW, IPPROTO_UDP); 参数为SOCK_RAW时,ntohs(addrClient1.sin_port)返回的远程端口号总是为0 ?为什么?
坊间传闻:Win7及以上操作系统限制使用SOCK_RAW[/quote] 数据是能够正确返回到指定的缓冲区recvbuf上的,且(struct sockaddr_in)remoteaddr结构中的sin_addr都是可以得到正确远程地址的,只是其中的sin_port总是返回0,不晓得怎么解决
baidu_20959169 2016-06-02
  • 打赏
  • 举报
回复
数据是能够正确返回到指定的缓冲区recvbuf上的,且(struct sockaddr_in)remoteaddr结构中的sin_addr都是可以得到正确远程地址的,只是其中的sin_port总是返回0,不晓得怎么解决

24,854

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 工具平台和程序库
社区管理员
  • 工具平台和程序库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧