2017-12-13 31 views
3

3ウェイハンドシェイクにscapyを使用して、リクエストを受信して​​応答を受信して​​います。しかし、FINフラグが設定されていると応答してTCPパケットを取得しています。私は要求されたページでHTTPパケットを期待しています。どこが間違っていますか?3ウェイハンドシェイクとPythonでscapyを使用してリクエストを取得

import sys 
import socket 

from scapy.all import * 


# 3 way handshake 
ip=IP(dst="webs.com") 
SYN=TCP(sport=80, flags="S", seq=100, dport=80) 
SYNACK=sr1(ip/SYN) 

my_ack = SYNACK.seq + 1 
ACK=TCP(sport=80, flags="A", seq=101, ack=my_ack, dport=80) 
send(ip/ACK) 

# request 
PUSH = TCP(sport=80, dport=80, flags='PA', seq=102, ack=my_ack) 
payload = "GET/HTTP/1.1\r\nHost: webs.com\r\nConnection: keep-alive\r\nCache-Control: max-age=0\r\nUpgrade-Insecure-Requests: 1\r\nUser-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/58.0.3029.110 Chrome/58.0.3029.110 Safari/537.36\r\nAccept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8\r\nAccept-Language: en-US,en;q=0.8\r\n\r\n" 
reply= sr1(ip/PUSH/payload, timeout=10) 

Wiresharkの結果

wireshark result

答えて

2

あなたのマシンはRSTパケットを送信しています。 RSTパケットはカーネルによって送信されています。
http://www.packetlevel.ch/html/scapy/scapy3way.html

iptablesでRSTパケットを削除してみます。
iptables -A OUTPUT -p tcp --tcp-flags RST RST -s 192.168.43.119 -j DROP

+0

3ウェイハンドシェイク中にRSTパケットが送信される理由は何ですか? – tarun14110

+0

原因Scapyは独自のソケットを作成し、TCP/IPスタック全体をバイパスします。カーネルはそれを知りませんし、接続を要求しなかったハンドシェイクの第2部分に応答してRSTパケットを正しく送信します。 – Noob123

1

あなたがリクエスト送信時に間違ったシーケンス番号を使用しているように見えます:

PUSH = TCP(sport=80, dport=80, flags='PA', seq=11, ack=my_ack) 

seqをするので、101ではなく11でなければなりませんあなたはSYNのために100を使いました。それを変更すると問題が解決されたようです。

また、テストでソースポートを変更せずに、TCP接続を適切にシャットダウンしない場合や、テストの間に120秒間待たない場合、サーバーは新しいパケットを以前の接続に属しているとみなし、応答では期待しないものを送信します(サーバー接続の状態によって異なります)。

+0

私の愚かな間違いを指摘してくれてありがとう。実際には、実際のコードで102をseq番号として使用しています。でも、毎回リセットフラグがセットされたパケットを取得するだけです。考えられる問題は何か? – tarun14110

+0

申し訳ありませんが、私の返信に間違いがありました。実際にACK番号にはペイロードが含まれていないので、最初のデータフレームでは102ではなく、シーケンス番号101を使用する必要があります。これを使用して、サーバーからの応答(301リダイレクト)を取得します。したがって、コードは機能します。もちろん、サーバーは決してACKまたは接続シャットダウンを取得しないため、しばらくの間レスポンスを送信しようとしています。私はあなたの質問がサイトをDDoSにSOユーザーを使用しようとしていないことを願っています:) – dvk

+0

私はまだそれを行うことができません。私は質問にwiresharkパケットを追加しました。見てください。私のマシンはリセットパケットを送信しています。私は理解できません。 – tarun14110

関連する問題