python构造IP报文的方法

  介绍

这篇文章主要讲解了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
  null

python构造IP报文的方法