27

私は中程度のプログラマーで、ネットワークプログラミングを始めたばかりです。

ネットワーク全般についての理解を深めるために、パケットレベルからいくつかの基本的なHTTPアクションを実行しようとしています。私の質問はこれです:SCAPYなどのライブラリを使用してHTTP GETリクエストと関連アイテムをパケットレベルで構築するにはどうすればよいですか?これは奇妙に聞こえるかもしれませんが、詳細な情報が見つからないようです。PAROSとEtherealを使った私自身の試みは...満足のいくものではありませんでした。

提供された助けをありがとう!

トリミエルト

4

3 に答える 3

37

完全な3ウェイハンドシェイクを実行する場合は、手動で実行する必要があります。

SYNパケットから始めます。

>>> syn = IP(dst='www.google.com') / TCP(dport=80, flags='S')
>>> syn
<IP  frag=0 proto=tcp dst=Net('www.google.com') |<TCP  dport=www flags=S |>>

次に、サーバーからSYN-ACKパケットを受信すると、sr1が機能します。次に、HTTPGETリクエストを送信します。

>>> syn_ack = sr1(syn)
Begin emission:
Finished to send 1 packets.
*
Received 1 packets, got 1 answers, remaining 0 packets

>>> syn_ack
<IP  version=4L ihl=5L tos=0x0 len=44 id=424 flags= frag=0L ttl=55 proto=tcp chksum=0x2caa src=74.125.226.148 dst=10.20.30.40 options=[] |<TCP  sport=www dport=ftp_data seq=3833491143 ack=1 dataofs=6L reserved=0L flags=SA window=5720 chksum=0xd8b6 urgptr=0 options=[('MSS', 1430)] |<Padding  load='\x00\x00' |>>>

次に、TCPシーケンスとACK番号を設定し、GETを送信します。

getStr = 'GET / HTTP/1.1\r\nHost: www.google.com\r\n\r\n'
request = IP(dst='www.google.com') / TCP(dport=80, sport=syn_ack[TCP].dport,
             seq=syn_ack[TCP].ack, ack=syn_ack[TCP].seq + 1, flags='A') / getStr
reply = sr1(request)
于 2011-01-20T18:31:54.250 に答える
0

チュートリアルをご覧になりましたか?コピーして貼り付けるだけで、次のように HTTP リクエストが組み立てられます。

>>>  a=Ether()/IP(dst="www.slashdot.org")/TCP()/"GET /index.html HTTP/1.0 \n\n"
于 2011-01-20T18:30:12.953 に答える