HTTPリクエストをキャプチャする簡単なpythonスクリプトを作成しました。HTTPリクエストをpythonスクリプトでキャプチャしました。
しかし、HTTPSリクエストをキャプチャできません。 URLに関する情報を取得したいだけです。
スニッフィングにはscapy
を使用しました。例えば:
from scapy.all import IP, sniff
from scapy.layers import http
def tcp_ayikla(paket):
if not paket.haslayer(http.HTTPRequest):
return
http_katmani = paket.getlayer(http.HTTPRequest)
ip_katmani = paket.getlayer(IP)
print '\n{0[src]} IP adresinden {1[Method]} {1[Host]}{1[Path]} sitesine ziyaret'.format(ip_katmani.fields, http_katmani.fields)
sniff(filter='tcp', prn=tcp_ayikla)
だから、私はスニッフィングについて質問があります。
1-)なぜHTTPSリクエストを取得できないのですか?
netstat
を次のように使用すると:
netstat -ap | grep http
HTTPSリクエストを確認できます
2-)他のプログラミング言語で何か方法はありますか?
HTTPリクエストをログに記録しようとしているためです。
私は何をしましたか?
どうすればいいですか?
あきらめるべきですか
HTTPSプロトコルは、HTTPアプリケーション層の上で暗号化されます。つまり、GETリクエスト(完全なURL)はHTTPヘッダーで暗号化され、ネットワークトラフィックを盗聴しているアプリケーションはトラフィックを復号化できません。
つまり、IP層はHTTPSで暗号化されていないため、IPアドレス(特にポート443-HTTPSでサーバーに接続されているもの)をログに記録できます。
これは、netstatコマンドが行うことです。 TCPネットワークカード上の接続を検索し、どの接続がポート443(httpsの既知のプロトコル)に接続しているかを記録し、接続しているHTTPSサーバーのIPアドレスを監視します。
暗号化されたネットワークトラフィックをキャプチャした場合、ブラウザからSSLキーを保存すると、キャプチャされたトラフィックを復号化できることに注意してください。 SSLキーをログに記録するときに、 Wiresharkを使用してSSLで盗聴されたネットワークトラフィックを復号化する方法については、ここを参照してください 。あなたはscapyで同様のことができるはずです。
HTTPSトラフィックを傍受するために使用できる手法は複数あります。数週間前、インターネットのトラフィック(HTTPまたはHTTPS)を簡単に表示できるように、asyncio
を使用して中間者アプリケーションを作成しました。ここでプロジェクトを見つけることができます。 mitm
: https://github.com/synchronizing/mitm
基本的に、通常のクライアント接続が次のようになっていると想像すると、
_client <-> server
_
mitm
は、クライアントのサーバーとして、およびサーバーのクライアントとして機能する中間者プロキシを作成します。
client <-> mitm (server) <-> mitm (emulated client) <-> server
mitm (server)
とmitm (emulated client)
は、client
とserver
の間で発生する要求を吐き出すことができます。