python TCP包注入方式
我就废话不多说了,大家还是直接看代码吧!
#!/usr/bin/envpython
importsocket
importstruct
defchecksum(data):
s=0
n=len(data)%2
foriinrange(0,len(data)-n,2):
s+=ord(data[i])+(ord(data[i+1])<<8)
ifn:
s+=ord(data[i+1])
while(s>>16):
s=(s&0xFFFF)+(s>>16)
s=~s&0xffff
returns
classip():
def__init__(self,source,destination):
self.version=4
self.ihl=5#InternetHeaderLength
self.tos=0#TypeofService
self.tl=0#totallengthwillbefilledbykernel
self.id=54321
self.flags=0#Morefragments
self.offset=0
self.ttl=255
self.protocol=socket.IPPROTO_TCP
self.checksum=0#willbefilledbykernel
self.source=socket.inet_aton(source)
self.destination=socket.inet_aton(destination)
defpack(self):
ver_ihl=(self.version<<4)+self.ihl
flags_offset=(self.flags<<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)
returnip_header
classtcp():
def__init__(self,srcp,dstp):
self.srcp=srcp
self.dstp=dstp
self.seqn=0
self.ackn=0
self.offset=5#Dataoffset:5x4=20bytes
self.reserved=0
self.urg=0
self.ack=0
self.psh=1
self.rst=0
self.syn=0
self.fin=0
self.window=socket.htons(5840)
self.checksum=0
self.urgp=0
self.payload=""
defpack(self,source,destination):
data_offset=(self.offset<<4)+0
flags=self.fin+(self.syn<<1)+(self.rst<<2)+(self.psh<<3)+(self.ack<<4)+(self.urg<<5)
tcp_header=struct.pack("!HHLLBBHHH",
self.srcp,
self.dstp,
self.seqn,
self.ackn,
data_offset,
flags,
self.window,
self.checksum,
self.urgp)
#pseudoheaderfields
source_ip=source
destination_ip=destination
reserved=0
protocol=socket.IPPROTO_TCP
total_length=len(tcp_header)+len(self.payload)
#Pseudoheader
psh=struct.pack("!4s4sBBH",
source_ip,
destination_ip,
reserved,
protocol,
total_length)
psh=psh+tcp_header+self.payload
tcp_checksum=checksum(psh)
tcp_header=struct.pack("!HHLLBBH",
self.srcp,
self.dstp,
self.seqn,
self.ackn,
data_offset,
flags,
self.window)
tcp_header+=struct.pack("H",tcp_checksum)+struct.pack("!H",self.urgp)
returntcp_header
deftest(source,site,data):
s=socket.socket(socket.AF_INET,
socket.SOCK_RAW,
socket.IPPROTO_RAW)
src_host=source
dest_host=socket.gethostbyname(site)
#IPHeader
ipobj=ip(src_host,dest_host)
iph=ipobj.pack()
#TCPHeader
tcpobj=tcp(1234,80)
tcpobj.data_length=len(data)
tcph=tcpobj.pack(ipobj.source,ipobj.destination)
#Injection
packet=iph+tcph+data
s.sendto(packet,(dest_host,80))
s.close()
if__name__=='__main__':
test("10.0.0.1","www.baidu.com","ITSTEST")
补充知识:python3socket抓包
看代码吧!
importsocket s=socket.socket(socket.AF_INET,socket.SOCK_RAW,socket.IPPROTO_TCP) whileTrue: print(s.recvfrom(65565))
以上这篇pythonTCP包注入方式就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。