Windows网络编程 の 原始套接字学习笔记ICMP

来源:互联网 发布:康师傅冰糖雪梨知乎 编辑:程序博客网 时间:2024/04/30 05:06

 

 

原始套接字学习笔记

 

由于原始套接字能够对基层传输机制加以控制,所以存在一定的潜在的安全漏洞,因此在WIN NT下只有“Administrators”组的成员,才有权创建类型为SOCK_RAW的原始套接字,

但是在NT中可以通过修改注册表绕过这一限制,能够达到让系统禁制对原始套接字的安全检查

方法如下:

注册表中创建如下变量 并设置为1DWORD类型)

HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/AFD/Parameters/DisableRawSecurity

 

 

 

 

 

 

icmp头结构

1 :由类型和代码定义了ICMP查询或消息的类型
2 :校验和是对ICMP头内容的一个补余求和 其
  
计算方法如下函数

 

用原始套接字发送报文发送的字节一般为
sendto
sizeof(ICMP头大小) + SendData(数据长度)
接收大小为
recvfrom
sizeof(ip头大小) + sizeof(ICMP头大小) + RecvData(数据长度)

IP头的结构如下

 

/---------------------------------------------------------------------------------------------/

 

 

 

 

 如果在编写Ping工具的时候希望可以记录经过的路由的IP和Name可以通过

通过

套接字选项setsockopt()设置IP_OPTIONS选项

这样在ICMP包抵达路由器时,他的IP地址就能自动添加到到ICMP包的IP选项头中

 

关于setsockopt看MSDN