介绍
这篇文章主要讲解了python构造IP报文的方法,内容清晰明了,对此有兴趣的小伙伴可以学习一下,相信大家阅读完之后会有帮助。
我就废话不多说了,大家还是直接看代码吧!
进口套接字 导入系统 导入的时间 进口结构 主机、端口=?0.60.66.66" 10086年 def make_forward_iphdr (source_ip=& # 39; 1.0.0.1& # 39;, dest_ip=& # 39; 2.0.0.2 # 39;,原型=socket.IPPROTO_UDP): # ip报头字段 ip_ihl=5 ip_ver=4 ip_tos=0 ip_tot_len=0 #内核将填写正确的总长度 ip_id=54321 #这包的Id ip_frag_off=0 ip_ttl=255 ip_proto=原型 ip_check=0 #内核将填写正确的校验和 ip_saddr=套接字。inet_aton (source_ip) #如果你想恶搞源ip地址 ip_daddr=套接字。inet_aton (dest_ip) ip_ihl_ver=(ip_ver & lt; & lt;4)+ ip_ihl # !包格式字符串意味着网络秩序 ip_header=struct.pack (& # 39; ! BBHHHBBH4s4s& # 39;, ip_ihl_ver, ip_tos, ip_tot_len, ip_id, ip_frag_off, ip_ttl, ip_proto, ip_check, ip_saddr, ip_daddr) 返回ip_header def make_forward_udphdr (src_port=1024, dst_port=10086): udp_header=struct.pack (& # 39; ! HHHH& # 39;, src_port, dst_port, 0, 0) 返回udp_header #校验和计算校验和所需功能 def校验和(味精): s=0 #循环一次服用2字符 因为我在范围(0,len(味精),2): w=奥德(味精[我])+(奥德(味精(i + 1)) & lt; & lt;8 ) s=s + w s=(, s>的在16)+(年代,0 xffff);=s +(年代祝辞祝辞16); #补充和面具到4字节=~年代,0 xffff 返回年代 def make_tcp_data (ip_header src_port=1024, dst_port=10086, source_ip=& # 39; 1.0.0.1& # 39;, dest_ip=& # 39; 2.0.0.2 # 39;, user_data=https://www.yisu.com/zixun/安馐浴?: tcp_source=src_port #源端口 tcp_dest=dst_port #目的港 tcp_seq=454 tcp_ack_seq=0 tcp_doff=5 # 4场,tcp报头,5 * 4=20个字节 # tcp标志 tcp_fin=0 tcp_syn=1 tcp_rst=0 tcp_psh=0 tcp_ack=0 tcp_urg=0 tcp_window=套接字。htons(5840) #最大允许窗口大小 tcp_check=0 tcp_urg_ptr=0 tcp_offset_res=(tcp_doff <4) + 0 tcp_flags=tcp_fin + (tcp_syn <1) + (tcp_rst <2) + (tcp_psh <3) + (tcp_ack <4) + (tcp_urg <5) # !包格式字符串意味着网络秩序 tcp_header=struct.pack (”!HHLLBBHHH’, tcp_dest tcp_source tcp_seq, tcp_ack_seq, tcp_offset_res, tcp_flags, tcp_window, tcp_check, tcp_urg_ptr) source_address=socket.inet_aton (source_ip) dest_address=socket.inet_aton (dest_ip) 占位符=0 协议=socket.IPPROTO_TCP tcp_length=len (tcp_header) + len (user_data) psh=struct.pack (”!4 s4sbbh source_address dest_address,占位符,协议,tcp_length); psh=psh + tcp_header + user_data; tcp_check=校验和(psh) #打印tcp_checksum #使tcp报头再次填正确的校验和,记得校验和并不是在网络字节顺序 tcp_header=struct.pack (”!HHLLBBH’, tcp_dest tcp_source tcp_seq, tcp_ack_seq, tcp_offset_res, tcp_flags, tcp_window) +结构。包(“H”, tcp_check) + struct.pack (”!H ', tcp_urg_ptr) #最后全包- syn包没有任何数据 包=ip_header + tcp_header + user_data 返回包
<>强python做在域名作为关键字的文章报文集合分类强>
将报文按域名分成不同的集合,而后写入excel,主要使用了字典数据结构
<强>输入内容:强>
[域名,后报文(一个域名有多条,在不同行),域名类型)
<强>输出内容:强>
[域名,后报文集合,域名类型)
# - * -编码:utf - 8 - * 进口openpyxl 从openpyxl进口load_workbook 从openpyxl进口工作簿 进口numpy np 熊猫作为pd导入 进口再保险 strinfo=re.compile (& # 39; [] + & # 39;) 书=load_workbook (& # 39; ex2.xlsx& # 39; & # 39; utf - 8 # 39;) 表=book.worksheets [0] 行=sheet.max_row 关口=sheet.max_column 帖子={} 类型={} 因为我在范围(2,+ 1行):#向字典里添加元素 dn=sheet.cell(我,1)value pv=sheet.cell(我,2)value 电视=sheet.cell(我,3)value 如果Post.get (dn)==没有:#第一次遇到這个域名 帖子(dn)=pv 类型(dn)=电视 其他: 帖子(dn) +=& # 39; \ n # 39; + pv 世行=工作簿() sh=wb.worksheets[0] #输出表格 因为我在范围(2,+ 1行):#从字典中取出内容存入excel dn=sheet.cell(我,1)value 如果我==2: 帖子(dn)=(dn) .replace后(& # 39;/& # 39;& # 39;& # 39;).replace (& # 39;: & # 39; & # 39;& # 39;) 上传(dn)=(dn) .replace (& # 39; (& # 39; & # 39;& # 39;).replace (& # 39;) & # 39;, & # 39;& # 39;) 帖子(dn)=(dn) .replace后(& # 39;* & # 39;& # 39;& # 39;).replace (& # 39;; & # 39; & # 39;& # 39;) 帖子(dn)=(dn) .replace后(& # 39;\ t # 39; & # 39;& # 39;).replace (& # 39; \ n # 39; & # 39;& # 39;) 帖子(dn)=(dn) .replace后(& # 39;$ & # 39;& # 39;& # 39;).replace (& # 39; @ # 39;, & # 39;& # 39;) 帖子(dn)=(dn) .replace后(& # 39;=& # 39;& # 39;& # 39;).replace (& # 39;, & # 39;, & # 39;& # 39;) 帖子(dn)=(dn) .replace后(& # 39;& # 39;& # 39;& # 39;).replace(& # 39;及# 63;& # 39;,& # 39;& # 39;) 帖子(dn)=strinfo.sub (& # 39;& # 39;Post (dn)) sh.append ([dn、Post (dn)、类型(dn))) 其他: 如果dn !=sheet.cell(张,1)value: 帖子(dn)=(dn) .replace后(& # 39;/& # 39;& # 39;& # 39;).replace (& # 39;: & # 39; & # 39;& # 39;) 上传(dn)=(dn) .replace (& # 39; (& # 39; & # 39;& # 39;).replace (& # 39;) & # 39;, & # 39;& # 39;) 帖子(dn)=(dn) .replace后(& # 39;* & # 39;& # 39;& # 39;).replace (& # 39;; & # 39; & # 39;& # 39;) 帖子(dn)=(dn) .replace后(& # 39;\ t # 39; & # 39;& # 39;).replace (& # 39; \ n # 39; & # 39;& # 39;) 帖子(dn)=(dn) .replace后(& # 39;$ & # 39;& # 39;& # 39;).replace (& # 39; @ # 39;, & # 39;& # 39;) null null null null null null null nullpython构造IP报文的方法