原始套接字学习笔记
由于原始套接字能够对基层传输机制加以控制,所以存在一定的潜在的安全漏洞,因此在WIN NT下只有“Administrators”组的成员,才有权创建类型为SOCK_RAW的原始套接字,
但是在NT中可以通过修改注册表绕过这一限制,能够达到让系统禁制对原始套接字的安全检查
方法如下:
注册表中创建如下变量 并设置为1(DWORD类型)
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