2016-06-28 60 views
0

我想製作一個與服務器(如谷歌)交互的程序,並與他進行三次握手。之後,我想發送一個GET請求來查找頁面的html部分。 我什麼時候需要插入GET請求? 謝謝。三次握手後HTTP請求

這就是三次握手我提出:

\t sport = random.randint(1024,65535) 
 

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

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

回答

0

三方握手建立在客戶端和服務器之間的連接。在HTTP協議下建立連接後,客戶端將向他想訪問的資源提交請求。請記住,在發送的每個數據包中都會得到一個ACK數據包,並且對於收到的每個數據包,您都應該發送一個ACK數據包。

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