我想创建一个与google等服务器交互的程序,并与他进行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)
答案 0 :(得分:0)
Threeway握手在客户端和服务器之间建立连接。在HTTP协议下建立连接后,客户端将向他想要访问的资源提交请求。请记住,在您发送的每个数据包上都会收到一个ACK数据包,对于您收到的每个数据包,您都应该发送一个ACK数据包。
答案 1 :(得分:0)
首先,您的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