下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
例11-4网络嗅探器程序示例例11-4网络嗅探器程序示例本例为网络嗅探器程序示例(以下代码将在运行60秒后,输出本机所在局域网内非本机发出的数据包,并统计来自不同主机的数据包数量。有关多线程的详细信息,请参本书相关章节的介绍)。#coding=gbkimportsocketimportthreadingimporttimeactive_degree=dict()flag=1lock=threading.Lock()#添加线程锁defmain():globalactive_degreeglobalflagHOST=socket.gethostbyname(socket.gethostname())s=socket.socket(socket.AF_INET,socket.SOCK_RAW,socket.IPPROTO_IP)s.bind((HOST,0))s.setsockopt(socket.IPPROTO_IP,socket.IP_HDRINCL,1)s.ioctl(socket.SIO_RCVALL,socket.RCVALL_ON)try:whileflag:c=s.recvfrom(65565)host=c[1][0]withlock:#使用线程锁保护对共享资源的访问active_degree[host]=active_degree.get(host,0)+1ifhost!='10.2.1.8':#假设的当前主机IPprint(c)finally:#确保在退出时禁用混杂模式并关闭套接字s.ioctl(socket.SIO_RCVALL,socket.RCVALL_OFF)s.close()t=threading.Thread(target=main)t.start()time.sleep(60)flag=0t.join()foriteminactive_degree.items():print(item)代码解释:(1)导入模块importsocketimportthreadingimporttime导入所需的模块:socket:用于网络通信。threading:用于多线程操作。time:用于时间相关的操作。(2)定义全局变量active_degree=dict()flag=1lock=threading.Lock()active_degree:一个字典,用于存储每个源IP地址的活跃度(即捕获到的数据包数量)。flag:一个全局标志,用于控制主循环的运行状态。lock:一个线程锁,用于保护对共享资源(active_degree字典)的访问,避免多线程环境下的数据竞争问题。(3)定义主函数defmain():globalactive_degreeglobalflag定义主函数main,并声明使用全局变量active_degree和flag。(4)获取本地主机名和IP地址HOST=socket.gethostbyname(socket.gethostname())使用socket.gethostname()获取本地主机名,然后通过socket.gethostbyname()将其转换为IP地址。(5)创建原始套接字s=socket.socket(socket.AF_INET,socket.SOCK_RAW,socket.IPPROTO_IP)s.bind((HOST,0))s.setsockopt(socket.IPPROTO_IP,socket.IP_HDRINCL,1)s.ioctl(socket.SIO_RCVALL,socket.RCVALL_ON)创建一个原始套接字(socket.SOCK_RAW),用于捕获所有经过本地网络接口的IP数据包。将套接字绑定到本地主机的IP地址和端口0。设置套接字选项IP_HDRINCL,表示IP头包含在数据包中。使用ioctl启用混杂模式(RCVALL_ON),使套接字能够捕获所有经过网络接口的数据包。(6)数据包捕获和处理try:whileflag:c=s.recvfrom(65565)host=c[1][0]withlock:active_degree[host]=active_degree.get(host,0)+1ifhost!='10.2.1.8':#假设的当前主机IPprint(c)finally:s.ioctl(socket.SIO_RCVALL,socket.RCVALL_OFF)s.close()使用try...finally结构确保在程序退出时能够正确关闭套接字并禁用混杂模式。在whileflag循环中,持续捕获数据包:使用recvfrom方法接收数据包,最大长度为65565字节。提取数据包的源IP地址(host)。使用线程锁(withlock)保护对active_degree字典的访问,避免多线程环境下的数据竞争。更新active_degree字典中对应IP地址的活跃度计数。如果源IP地址不是本地主机的IP地址(假设为10.2.1.8),则打印捕获的数据包内容。(7)创建并启动线程t=threading.Thread(target=main)t.start()time.sleep(60)flag=0t.join()创建一个线程t,目标函数为main。启动线程start()。等待60秒(time.sleep(6
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 锑白炉工冲突解决测试考核试卷含答案
- 石材开采工QC管理模拟考核试卷含答案
- 烟叶回潮设备操作工岗前技能竞赛考核试卷含答案
- 中小电机笼型绕组制造工岗前实操知识能力考核试卷含答案
- 水解蒸馏工岗前协调考核试卷含答案
- 电解熔铸工岗位责任考核试卷含答案
- 收银员岗位应急准备考核试卷含答案
- 2026年小学三年级数学上册《数学思维训练》完整教案
- 2026年西师版小学四年级数学上册第三单元《乘法运算》教案
- 执业药师(西药)药学专业知识二考前预测题型专练
- 煤粉管道测厚施工方案
- 2025年合肥市社会化工会工作者招聘34人笔试备考题库及答案解析
- 2025至2030中国家政服务行业市场深度分析及前景趋势与投资管理报告
- 2025年秋季高一数学开学第一课课件
- 2025年秋季开学教师大会校长讲话:收心、静心、用心-为教育回归本心为新学期提气定神
- 2025审计法务考试题库及答案
- 人教版2025-2026学年六年级数学上册综合素质测试卷
- 陪诊师培训课件
- 抗肿瘤药物配置与防护规范
- 2025年二级茶艺师(技师)资格理论考试题库(含答案)
- ISOIEC 38505-1 2017数据治理程序文件一整套
评论
0/150
提交评论