ICMP 为什么recvfrom接收到的内容是错误的?

cyradg2008 2015-01-29 09:23:50
Delphi7环境,实现ping原理,这个代码以C代码居多,但是在D7下,会出现sendto是成功的,recvfrom接收到的内容是错误的,注意是内容错误,不是接收不到,代码大致如下:
// 创建原始套节字
WSAStartup(MakeWord(2,2), SData);
sRaw := socket(AF_INET, SOCK_RAW, IPPROTO_ICMP);
// 设置目的地址
dest.sin_family := AF_INET;
dest.sin_port := htons(0);
dest.sin_addr.S_addr := inet_addr('192.168.10.1');
// 创建ICMP封包
picmp :=PICMP_HDR(@Buf);
// 填写ICMP封包数据
picmp^.icmp_type := 8; // 请求一个ICMP回显
picmp^.icmp_code := 0;
picmp^.icmp_id := GetCurrentProcessId();
picmp^.icmp_checksum := 0;
picmp^.icmp_sequence := 0;
picmp^.icmp_timestamp := GetTickCount();
picmp^.icmp_checksum := checksum(PWORD(@Buf), sizeof(Buf));
nRet := sendto(sRaw, Buf, sizeof(Buf), 0,dest, sizeof(dest));//这里是完全成功了,用wireshark抓包得知
nLen :=sizeof(from);
nRet := recvfrom(sRaw, recvBuf, sizeof(recvBuf), 0, from, nLen);//这里的recvBuf内容简直就是混乱,用wireshark抓包得知
recvfrom执行成功,但是recvfrom内容完全混乱,源地址和目标地址完全颠倒了,from参数的IP地址居然不是192.168.10.1,而是本机地址!求解!
...全文
184 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

1,594

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 网络通信/分布式开发
社区管理员
  • 网络通信/分布式开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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