介绍
小编这次要给大家分享的是python如何实现TCP包注入,文章内容丰富,感兴趣的小伙伴可以来了解一下,希望大家阅读完这篇文章之后能够有所收获。
我就废话不多说了,大家还是直接看代码吧!
# !/usr/bin/env python 进口套接字 进口结构 def校验和(数据): s=0 n=len(数据)% 2 因为我在范围(0,len(数据)- n, 2): s +=奥德(数据[我])+(奥德(数据(i + 1)) & lt; & lt;8) 如果n: s +=奥德(数据(i + 1)) ,而(s祝辞的在16): s=(s,,0 xffff) + (s祝辞的在16)=~年代,0 xffff 返回年代 类ip (): def __init__(自我、来源、目的地): 自我。版本=4 自我。ihl=5 #互联网头长度 自我。tos=0 #类型的服务 自我。tl=0 #总长度将由内核 自我。id=54321 自我。旗帜=0 #更多的碎片 自我。抵消=0 自我。ttl=255 自我。协议=socket.IPPROTO_TCP 自我。校验和=0 #将由内核 自我。源=socket.inet_aton(源) self.destination=socket.inet_aton(目的地) def包(自我): ver_ihl=(自我。版本& lt; & lt;4)+ self.ihl flags_offset=(自我。旗& lt; & lt;13)+ self.offset ip_header=struct.pack (“! BBHHHBBH4s4s" ver_ihl, self.tos, self.tl, self.id, flags_offset, self.ttl, self.protocol, self.checksum, self.source, self.destination) 返回ip_header 类tcp (): def __init__(自我、srcp dstp): 自我。srcp=srcp 自我。dstp=dstp 自我。seqn=0 自我。ackn=0 自我。抵消=5 #数据偏移量:5 x4=20个字节 自我。保留=0 自我。=0开始 自我。ack=0 自我。psh=1 自我。rst=0 自我。syn=0 自我。鳍=0 自我。窗口=socket.htons (5840) 自我。校验和=0 自我。urgp=0 自我。载荷=?“ def包(自我、来源、目的地): data_offset=(自我。抵消& lt; & lt;4)+ 0 旗帜=自我。鳍+(自我。syn & lt; & lt;1)+(自我。rst & lt; & lt;2)+(自我。psh & lt; & lt;3)+(自我。ack & lt; & lt;4)+(自我。开始& lt; & lt;5) tcp_header=struct.pack (“! HHLLBBHHH" self.srcp, self.dstp, self.seqn, self.ackn, data_offset, 旗帜, self.window, self.checksum, self.urgp) #伪头字段 source_ip=源 destination_ip=目标 保留=0 协议=socket.IPPROTO_TCP total_length=len (tcp_header) + len (self.payload) #伪头 psh=struct.pack (“! 4 s4sbbh" source_ip、 destination_ip、 保留, 协议, total_length) psh=psh + tcp_header + self.payload tcp_checksum=校验和(psh) tcp_header=struct.pack (“! HHLLBBH" self.srcp, self.dstp, self.seqn, self.ackn, data_offset, 旗帜, self.window) tcp_header +=struct.pack (“H" tcp_checksum) + struct.pack (“! H" self.urgp) 返回tcp_header def测试(源、网站数据): s=socket.socket (socket.AF_INET socket.SOCK_RAW, socket.IPPROTO_RAW) src_host=源 dest_host=socket.gethostbyname(网站) # IP报头 ipobj=ip (src_host dest_host) iph=ipobj.pack () # TCP报头 tcpobj=tcp (1234、80) tcpobj.data_length=len(数据) tcph=tcpobj.pack (ipobj.source ipobj.destination) #注入 包=iph + tcph +数据 s.sendto(包(dest_host, 80)) s.close () if __name__==& # 39; __main__ # 39;: 测试(“10.0.0.1",“www.baidu.com",“TEST")
<强> python3插座抓包强>
看代码吧!
进口套接字 s=socket.socket (socket.AF_INET socket.SOCK_RAW socket.IPPROTO_TCP) 而真正的: 印刷(s.recvfrom (65565)
看完这篇关于python如何实现TCP包注入的文章,如果觉得文章内容写得不错的话,可以把它分享出去给更多人看到。