Python模拟TCP三次握手与HTTP请求实现

Ryan
Ryan
发布时间:2026-10-14 | 5人浏览过
原创

本文介绍如何使用Python的Scapy库手动构建TCP数据包,模拟TCP三次握手过程并建立连接。通过构造SYN、ACK标志位及序列号,成功发起HTTP GET请求并接收服务器响应,展示了网络底层协议交互的原理与代码实现。

Python模拟TCP握手源代码

以下是实现该功能的完整源代码。代码主要利用Scapy库构造IP和TCP层数据包,手动指定源端口、序列号及标志位(如SYN、ACK),以模拟TCP连接的建立过程及后续的数据传输。


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)

程序运行结果分析

执行上述脚本后,终端将输出服务器返回的响应内容。根据目标服务器的配置不同,可能会返回正常的HTTP页面数据,也可能返回错误代码(如505 HTTP版本不支持)。输出结果直观展示了客户端发送请求后接收到的服务端反馈。


# python exp3.py
<meta http-equiv="Pragma" content="no-cache">
<meta http-equiv="Expires" content="wed, 26 Feb 1997 08:21:57 GMT">
<html><head><title>505 HTTP Version not supported</title></head><body><center><h1>505 HTTP Version not supported</h1></center></body></html>�p�-1���-1��2��2��D��o�p�-1��`��D

Wireshark抓包验证

为了更清晰地观察网络交互细节,可以使用Wireshark等抓包工具捕获网卡流量。截图展示了完整的TCP三次握手过程(SYN、SYN-ACK、ACK)以及随后的HTTP请求与响应数据包,验证了代码模拟握手的有效性。

以上内容涵盖了利用Python模拟TCP连接及发送数据的核心实现。希望这些代码和解释能帮助读者深入理解TCP协议的工作机制。如果有任何疑问或建议,欢迎在评论区交流,同时也感谢大家的支持。

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表