My computer-network project about packet capture. /*计网课设——简单的个人网络嗅探器*/
My computer-network project about packet capture.
socket
, struct
]socket
的关键字socket.AF_PACKET
,因此使用CentOS.INTERVAL
[ int ]
在方法unpack_eth_packet
中,该变量控制每次获取MAC帧的速度,默认运行的时候取包间隔1s。
HAVE_SAVED
[ boolean ]
该变量控制是否写入文件保存解得的数据包部分,默认为False
(不保存),在每一个解包方法中都有控制是否写入文件。
HAVE_FILTER_PROTOCOL
[ boolean ]
该变量控制是否过滤某种协议,默认为False
(不过滤),在unpack_ip_packet
中使用。开启过滤时,需要输入协议(upper case),然后就只会解指定协议的数据包,不会尝试解别的协议的数据包。
HAVE_FILTER_IP
[ boolean ]
该变量控制是否需要过滤来源IP
和目的IP
,默认为False
(不过滤),在unpack_ip_packet
中使用。开启过滤时,需要输入指定的来源IP
和目的IP
。然后就只会解指定IP的数据包,不会尝试解含有别的IP的数据包。
以上变量都在CONFIG
中,要显示的字段,都在类的init方法中,以字典
的形式形式存储,以遍历
的方式输出(和保存)
显示网卡信息,我设置了只显示网卡和对应IP。(可以对不同的网卡进行选择,bind之后接收数据)
根据配置中的变量情况确定是否进行相应的过滤操作。
尝试建立socket
连接,若成功,则进行解析MAC帧;若失败,则结束该程序。
开始解析网络层协议数据包部分,首先分析该IP数据包头部。
ICMP
协议和传输层协议的数据包的解析。开始解析传输层和ICMP协议数据包部分,首先分析该IP数据包的上层(ICMP属于本层)协议头部。
TCP
、UDP
、ICMP
首部对应的信息,对应的,剩下的数据部分就是数据段部分。utf-8
编码的转换(为了应用层HTTP协议等,查看请求数据,否则会出现文字段部分乱码的现象).尝试失败就进行转16进制后转ascii码,然后将其传入对应协议的字典保存。HTTP
上层协议信息,则将该数据段另外保存。(可知为某些HTTP请求的信息,另外存放以便分析/搜索字段) — added on 2018/12/28若开启文件保存,就在每个方法末尾加上文件写入,将获取的所有数据包信息保存到文件以便后面查看。
对此存在疑惑或者代码出现了问题?欢迎大佬提出issues指正。