Python原始套接字编程实例解析

  

这篇文章主要介绍了Python原始套接字编程实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

  

在实验中需要自己构造单独的HTTP数据报文,而使用SOCK_STREAM进行发送数据包,需要进行完整的TCP交互。

  

因此想使用原始套接字进行编程,直接构造数据包,并在IP层进行发送,即采用SOCK_RAW进行数据发送。

  

使用SOCK_RAW的优势是,可以对数据包进行完整的修改,可以处理IP层上的所有数据包,对各字段进行修改,而不受UDP和TCP的限制。

  

下面开始构造HTTP数据包,

  

IP层和TCP层使用python的Impacket库,http内容自行填写。

        # !/usr/bin/env python      #-------------------------------------------------------------------------------   #名称:raw_http.py   #目标:构建一个原始http get包   #   #作者:Yangjun   #   #创建:08/02/2014   #版权:2014 (c) Yangjun   你licence> #执照:& lt;;   #-------------------------------------------------------------------------------      导入系统   进口套接字   从进口ImpactDecoder impacket ImpactPacket      def main ():      如果len (sys.argv) & lt;3:   打印”使用:% s & lt; src ip>& lt; dst ip>“% sys.argv [0]   打印”使用:% s & lt; src ip>& lt; dst ip>& lt; cnt>“% sys.argv [0]   sys.exit (1)   elif len (sys.argv)==3:   src=https://www.yisu.com/zixun/sys.argv [1]   dst=sys.argv [2]   问=1   elif len (sys.argv)==4:   src=sys.argv [1]   dst=sys.argv [2]   问=sys.argv [3]   其他:   打印“输入错误!”   sys.exit (1)   #打印src, dst   ip=ImpactPacket.IP ()   ip.set_ip_src (src)   ip.set_ip_dst (dst)      #创建一个新的ICMP数据包类型的回声。   icmp=ImpactPacket.ICMP ()   tcp=ImpactPacket.TCP ()   tcp.set_th_sport (55968)   tcp.set_th_dport (80)   tcp.set_th_seq (1)   tcp.set_th_ack (1)   tcp.set_th_flags (0 x18)   tcp.set_th_win (64)      tcp。包含(ImpactPacket。数据(“HTTP/1.1/丙氨酸/DIYLife/41264/528 \ r \ nHost: 192.168.111.1 \ r \ nAccept-Encoding:身份\ r \ n \ r \ n”))      ip.contains (tcp)      #打开原始套接字。通常需要特殊的权限。   s=socket.socket(套接字。AF_INET,插座。SOCK_RAW socket.IPPROTO_TCP)   s.setsockopt(套接字。IPPROTO_IP,插座。IP_HDRINCL, 1)   seq_id=0   问比;=1:   #计算校验和。   seq_id=seq_id + 1   tcp.set_th_seq (seq_id)   tcp.calculate_checksum ()      #将其发送到目标主机。   s.sendto (ip.get_packet (), (dst, 80))   问=问1      if __name__==癬_main__”:   main ()      

运行后抓包如下:

  

 Python原始套接字编程实例解析

  

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

Python原始套接字编程实例解析