スリーウェイハンドシェイクを手動で管理し、(単一のパケットを送信して) HTTP GET リクエストを Web サーバーに送信し、応答パケットを手動で管理する単純な Scapy スクリプトを作成しようとしています (そのための ACK パケットを手動で送信する必要があります)。応答)。
スクリプトの冒頭は次のとおりです。
#!/usr/bin/python
import logging
logging.getLogger("scapy.runtime").setLevel(logging.ERROR)
# Import scapy
from scapy.all import *
# beginning of 3-way-handshake
ip=IP(dst="www.website.org")
TCP_SYN=TCP(sport=1500, dport=80, flags="S", seq=100, options=[('NOP', None), ('MSS', 1448)])
TCP_SYNACK=sr1(ip/TCP_SYN)
my_ack = TCP_SYNACK.seq + 1
TCP_ACK=TCP(sport=1500, dport=80, flags="A", seq=101, ack=my_ack)
send(ip/TCP_ACK)
TCP_PUSH=TCP(sport=1500, dport=80, flags="PA", seq=102, ack=my_ack)
send(ip/TCP_PUSH)
# end of 3-way-handshake
# beginning of GET request
getString = 'GET / HTTP/1.1\r\n\r\n'
request = ip / TCP(dport=80, sport=1500, seq=103, ack=my_ack + 1, flags='A') / getString
# help needed from here...
上記のスクリプトは、3 ウェイ ハンドシェイクを完了し、HTTP GET 要求を準備します。
次に、次の方法でリクエストを送信する必要があります。
send(request)
さて、送信後、応答を取得/手動で読み取る必要があります。
私の目的は、応答の ACK パケットを手動で送信して応答を読み取ることです (これがスクリプトの主な目的です)。
どうやってやるの?
関数はsend(_)
適切ですか、それとも次のようなものを使用する方が良いですかresponse = sr1(request)
(ただし、この場合、ACK は自動的に送信されると思います)。