私はPythonスクリプトからUDPパケットをキャプチャするためにTcpdumpを開こうとしています。ここに私のコードは次のとおりです。Tcpdump:Pythonスクリプトからパケットをキャプチャできません。
os.system("tcpdump -i wlp2s0 -n dst 8.8.8.8 -w decryptedpackets.pcap &")
testfile = urllib.URLopener()
s = socket(AF_INET, SOCK_DGRAM)
host = "8.8.8.8"
port = 5000
buf = 1024
addr = (host, port)
s.connect((host, port))
f = open("file.txt", "rb")
data = f.read(buf)
while (data):
if (s.sendto(data, addr)):
print "sending ..."
data = f.read(buf)
私は手動でのシェルでこのコマンドを実行する場合、私は(PCAPファイルがコンテンツを持っている)パケットをキャプチャすることができています:
tcpdump -i wlp2s0 -n dst 8.8.8.8 -w decryptedpackets.pcap &
しかし、私はos.systemを使用する場合( )私はパケットをキャプチャできません。 (私はPCAPファイルを開くと、私はそれが空で見つける)
私が検証され、Pythonスクリプトが実行されたときに作成されるプロセスがあることを発見した:
ルート10092 0.0 0.0 17856 1772 PTS/19 S 10時25午後12時00 のtcpdump -i wlp2s0 -n DST 8.8.8.8 -w decryptedpackets.pcap
また、私は、任意のアクセス許可の問題を回避するためにはsudoユーザーとしてこれを実行していますよ。
この問題の原因は何ですか?
問題は何ですか?あなたは '.pcap'ファイルに' tcpdump'パケットを書いています。そしてあなたの 'ps'出力は、それがうまく立ち上げられたことを示しています。その部分は機能しているようです。しかし、あなたは 'ファイルを開きます。その内容をリモートホストに送信します。何が起こると思いますか? –
問題は、os.system()を実行すると、キャプチャされたパケットがなく、pcapファイルが空であることです。しかし、シェルでtcpdumpコマンドを手動で実行すると、pcapファイルに内容がある –
'&'を使わず、 'subprocess'モジュールから良い選択肢を選んでください。 –