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

本文详细介绍了如何利用原始套接字绕过NT系统对SOCK_RAW类型的安全检查,包括注册表配置方法,并阐述了ICMP头结构及其校验和计算方法。此外,还讲解了通过套接字选项设置记录路由IP和名称的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

 

原始套接字学习笔记

 

由于原始套接字能够对基层传输机制加以控制,所以存在一定的潜在的安全漏洞,因此在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

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值