ICMP 为什么recvfrom接收到的内容是错误的?
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,而是本机地址!求解!