重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
今天就跟大家聊聊有关使用python模拟TCP连接并实现发送数据,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。
成都创新互联公司长期为1000+客户提供的网站建设服务,团队从业经验10年,关注不同地域、不同群体,并针对不同对象提供差异化的产品和服务;打造开放共赢平台,与合作伙伴共同营造健康的互联网生态环境。为河南企业提供专业的成都网站建设、成都网站制作,河南网站改版等技术服务。拥有十多年丰富建站经验和众多成功案例,为您定制开发。源码如下
from scapy.all import * import logging logging.getLogger('scapy.runtime').setLevel(logging.ERROR) target_ip = '192.168.1.1' target_port = 80 data = 'GET / HTTP/1.0 \r\n\r\n' def start_tcp(target_ip,target_port): global sport,s_seq,d_seq #主要是用于TCP3此握手建立连接后继续发送数据 try: #第一次握手,发送SYN包 ans = sr1(IP(dst=target_ip)/TCP(dport=target_port,sport=RandShort(),seq=RandInt(),flags='S'),verbose=False) sport = ans[TCP].dport #源随机端口 s_seq = ans[TCP].ack #源序列号(其实初始值已经被服务端加1) d_seq = ans[TCP].seq + 1 #确认号,需要把服务端的序列号加1 #第三次握手,发送ACK确认包 send(IP(dst=target_ip)/TCP(dport=target_port,sport=sport,ack=d_seq,seq=s_seq,flags='A'),verbose=False) except Exception,e: print '[-]有错误,请注意检查!' print e def trans_data(target_ip,target_port,data): #先建立TCP连接 start_tcp(target_ip=target_ip,target_port=target_port) #print sport,s_seq,d_seq #发起GET请求 ans = sr1(IP(dst=target_ip)/TCP(dport=target_port,sport=sport,seq=s_seq,ack=d_seq,flags=24)/data,verbose=False) #ans.show() #读取服务端发来的数据 rcv = ans[Raw] print rcv if __name__ == '__main__': #start_tcp(target_ip,target_port) trans_data(target_ip,target_port,data)