sniff,截取外部发送到你机器上的IP数据包.

本文介绍了一个简单的Sniffer程序实现,该程序能够在应用层通过套接字捕获流入网卡的原始IP数据包,并解析IP、TCP、UDP及ICMP协议头部信息。

sniff,截取外部发送到你机器上的IP数据包.

sniffer 这类型的软件多了去了,都是大同小异的,我简单的实现了一个..下面描述下工作原理吧.

这样的小程序是在应用层通过套接字直接获取留进网卡的IP数据包,注意是流进的,同时获取到的是

原封的IP数据包,只有这样才可以对数据包进行分析来源和协议.

 

sniff不是直接通过调用底层的API,所以无法直接控制网卡的信息,如果要获取本机发出的包,或者说获取更底

层的协议的数据,就必须要从网卡驱动下手了,很多的网络防火墙就是这样做的.对这个我也不大了解,也是刚看了

别人的文章.没怎么深入,要了解的自己百度.

 

 

这几个是重要的数据结构,从socket中获得ip数据包后,你就可以进行分析

要记得的一点是:

IP包首部长度,这个值以4字节为单位.IP协议首部的固定长度为20个字节,如果IP包没有选项,那么这个值为5.
TCP包头呢貌似是以1/4字节为单位的-_-!

破空间不支持上传文件哦!!

SACPY (Simple Application Communication Protocol Python) 是一个用于网络通信的库,其中的 `sniff` 函数通常用于网络抓取。如果你在使用 `sniff` 功能时发现收不到数据包,想要停止监听,你可以通过以下步骤操作: 1. **设置超时**:在调用 `sniff` 函数时,可以设置一个 `timeout` 参数,当指定的时间过去而没有接收到预期的数据包时,会自动停止。 ```python from scapy.all import sniff # 设置5秒超时 response = sniff(prn=process_packet, timeout=5) ``` 2. **回调函数标志**:在 `prn` 参数中提供一个函数,这个函数可以根据需要检查每个捕获的数据包,然后返回一个布尔值来决定是否继续监听。当函数返回 False 或者满足某些停止条件时,`sniff` 将停止。 ```python def stop_sniff(packet): # 检查 packet 是否是你期待的内容,如果没有,则返回 False if not is_desired_packet(packet): return False # 返回 True 继续监听,False 则停止 response = sniff(prn=stop_sniff) ``` 3. **直接中断**:如果你正在使用事件驱动的模式,并且有控制权,可以直接在回调函数中调用 `KeyboardInterrupt` 来中断 `sniff` 进程。 ```python response = sniff(prn=process_packet) try: while True: pass except KeyboardInterrupt: # 断开连接或停止嗅探 break ``` 请注意,实际停止监听的方式取决于你如何初始化和管理 `sniff` 的上下文,以及你对程序流程的具体需求。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值