質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
HTTP

HTTP(Hypertext Transfer Protocol)とはweb上でHTML等のコンテンツを交換するために使われるアプリケーション層の通信プロトコルです。

Wireshark

Wireshark(ワイヤシャーク)は、ネットワーク・アナライザソフトウェアです。 IP、DHCPなど800以上のプロトコルを解析できる機能があり、 Windows、Linux、BSD、Mac OS Xなどで利用が可能です。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

4446閲覧

Scapyを使ってHTTPのレスポンスが受け取れない

akakou

総合スコア60

HTTP

HTTP(Hypertext Transfer Protocol)とはweb上でHTML等のコンテンツを交換するために使われるアプリケーション層の通信プロトコルです。

Wireshark

Wireshark(ワイヤシャーク)は、ネットワーク・アナライザソフトウェアです。 IP、DHCPなど800以上のプロトコルを解析できる機能があり、 Windows、Linux、BSD、Mac OS Xなどで利用が可能です。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2017/08/25 13:43

編集2017/08/25 16:30

###前提・実現したいこと
Scapyのインタラクティブシェルを使って Googleのサイト とHTTP通信をしたいです。

###発生している問題
以下に書かれたコードをscapyインタラクティブシェルにコピペして実行しても、変数responseにHTTPレスポンスの情報が見つかりません。
もし別に受け取り方があるのであれば、ご教授ください。

Out[1]: <IP version=4 ihl=5 tos=0x0 len=40 id=31671 flags= frag=0 ttl=56 proto=tcp chksum=0x9de5 src=216.58.197.228 dst=192.168.10.108 options=[] |<TCP sport=www_http dport=50000 seq=585710593 ack=141 dataofs=5 reserved=0 flags=A window=42780 chksum=0x7c6c urgptr=0 |>>

###該当のソースコード

python:scapy

1 2'''基本パケットの作成''' 3ip = IP(dst='www.google.com') 4tcp = TCP(sport=50000,dport=80,flags='S',seq=100) 5 6 7'''パケット送信''' 8# SYN SYN_ACK 9syn= ip/tcp 10syn_ack = sr1(syn) 11 12# ACKパケットの設定 13tcp.seq += 1 14tcp.ack = syn_ack.seq + 1 15tcp.flags = 'A' 16 17# HTTP GETのパケットをのっける 18get = 'GET / HTTP/1.1\r\nHost: www.google.com\r\n\r\n' 19http = ip/tcp/get 20 21# リクエスト送信 22response = sr1(http) 23tcp.seq += len(get) 24 25 26'''コネクションを切る''' 27# FAフラグを持ったFINACKパケットの送信 28tcp.flags = 'FA' 29fin_ack = sr1(ip/tcp) 30tcp.seq += 1 31 32# 最後にACKを返す 33tcp.ack = fin_ack.seq + 1 34tcp.flags = 'A' 35send(ip/tcp) 36 37# レスポンスの表示 38# インタラクティブシェルなので、以下のコードで中身が見れるはず 39response

###試したこと
Wiresharkで調べたところ、HTTPリクエストは正常に送信され、PC自体にはレスポンスも返ってきていました。
pcapファイルはこちら

###補足情報(言語/FW/ツール等のバージョンなど)

  • Scapy
  • Python3
  • Antergos(Linux)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

解決法

sr1(http)sr(http, multi=1, timeout=1)にしたら

response[0][1][1]["Raw"].loadでレスポンスを取得できました。

詳細

詳細に関しては以下のサイトにまとめてあります。
http://qiita.com/akakou/items/eaffe038feeb66f2cf8a

投稿2017/08/26 04:34

編集2017/08/26 17:27
akakou

総合スコア60

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問