pIcmp->icmp_type = 8; // 请求一个ICMP回显
pIcmp->icmp_code = 0;
pIcmp->icmp_id = (USHORT)::GetCurrentProcessId();
pIcmp->icmp_checksum = 0;
pIcmp->icmp_sequence = 0;
// 填充数据部分,可以为任意
memset(&buff[sizeof(ICMP_HDR)], 'E', 32);
// 开始发送和接收ICMP封包
USHORT nSeq = 0;
char recvBuf[1024];
SOCKADDR_IN from;
int nLen = sizeof(from);
while(TRUE)
{
static int nCount = 0;
int nRet;
if(nCount++ == 4)
break;
pIcmp->icmp_checksum = 0;
pIcmp->icmp_timestamp = ::GetTickCount();
pIcmp->icmp_sequence = nSeq++;
pIcmp->icmp_checksum = checksum((USHORT*)buff, sizeof(ICMP_HDR) + 32);
nRet = ::sendto(sRaw, buff, sizeof(ICMP_HDR) + 32, 0, (SOCKADDR *)&dest, sizeof(dest));
if(nRet == SOCKET_ERROR)
{
printf(" sendto() failed: %d \n", ::WSAGetLastError());
return -1;
}
代码里没有 bind ,没有listen 1模拟ping的的程序, 为什么要用udp(sento函数)2端口是:htons(0); 为什么是这个呢?
解决方案 »
- WDK编译问题:include <ntddk.h>提示找不到相应文件而引发的一连串问题。。
- 使用EVENT来作为file Mapping共享内存时两个进程之间进行握手的标志
- ComboBox控制另一个ComboBox中的选项
- 请问如何在代码中改变对话框的标题?
- 用ado访问数据库,为什么多线程访问时,出现异常,还有内存泄漏,怎么改。愁啊!
- why????????????????????????????????
- 显示器黑屏问题
- 有关Mail连接到邮箱中,选择文件夹的问题!
- socks4/socks5代理编程:穿不过代理服务器Winroute?
- 新手求助!
- VisualEleven你好,请教重叠 io问题(代码是出自你博客上的)
- 关于头文件 resource.h 的问题,求助
百度 raw socket 一切明了..
可以使用send,只是说一般面向无连接的使用了sendto而已
ping协议既不是使用UDP,也不是TCP
================
2端口是:htons(0); 为什么是这个呢?
随意吧,端口对于ICMP协议来说本来就没啥价值