【问题标题】:GET request on HTTP after 3-way handshake3 次握手后对 HTTP 的 GET 请求
【发布时间】:2016-10-30 20:17:18
【问题描述】:

我想制作一个程序,与谷歌等服务器交互并与他进行 3 次握手。之后我想发送一个 GET 请求来查找页面的 html 部分。 我什么时候需要插入 GET 请求? 谢谢。

这是我进行的 3 次握手:

sport = random.randint(1024,65535)

# SYN     
ip=IP(src='192.168.23.131',dst='81.17.241.142')
SYN=TCP(sport=sport,dport=443,flags='S',seq=1000)
SYNACK=sr1(ip/SYN)

# ACK          
ACK=TCP(sport=sport, dport=443, flags='A', seq=SYNACK.ack + 1, ack=SYNACK.seq + 1)
send(ip/ACK)

【问题讨论】:

    标签: html python-2.7 http tcp scapy


    【解决方案1】:

    三次握手在客户端和服务器之间建立连接。在HTTP协议下建立连接后,客户端就是向他要访问的资源提交请求。请记住,在您发送的每个数据包上,您都会收到一个 ACK​​ 数据包,并且对于您收到的每个数据包,您都应该发送一个 ACK​​ 数据包。

    【讨论】:

      【解决方案2】:

      首先,您的ACK 序列号应该是SYNACK.ack,而不是SYNACK.ack + 1。您可以在握手后直接发送请求(假设您要发送 HTTP/1.1 请求):

      sport = random.randint(1024,65535)
      dport = 443
      ip_src = '192.168.23.131'
      ip_dst = '81.17.241.142'
      
      # SYN     
      ip=IP(src=ip_src, dst=ip_dst)
      SYN=TCP(sport=sport, dport=dport, flags='S', seq=1000)
      SYNACK=sr1(ip/SYN)
      
      # ACK          
      ACK=TCP(sport=sport, dport=dport, flags='A', seq=SYNACK.ack, ack=SYNACK.seq + 1)
      send(ip/ACK)
      
      # GET request
      req =  "GET / HTTP/1.1\r\n"
      req += "Host: " + ip_dst + "\r\n"
      # Other headers ...
      req += "\r\n"
      
      DATA = TCP(sport=sport, dport=dport, flags='A', seq=SYNACK.ack, ack=SYNACK.seq + 1)/req
      ANS = sr1(DATA) # this is probably going to be only an ACK segment, next one should be your HTTP response
      

      【讨论】:

        猜你喜欢
        • 2021-10-15
        • 1970-01-01
        • 2014-12-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-07-02
        • 2016-12-23
        • 2015-11-08
        相关资源
        最近更新 更多