Tôi đang chạy tcpdump
trong một tiến trình con như thế này:Bắt stdout từ một tiến trình con tcpdump sau khi chấm dứt nó
pcap_process = subprocess.Popen(['tcpdump', '-s 0', '-w -', 'tcp'],
stdout=subprocess.PIPE, stderr=subprocess.PIPE)
Đối số -w -
là rất quan trọng: nó nói tcpdump
để in kết quả file .pcap để stdout
.
Sau đó, tôi truy cập trang web bằng cách sử dụng urllib.open()
. Sau khi điều này được thực hiện, tôi muốn giết tcpdump
và đặt bất cứ điều gì nó in thành một chuỗi. Tôi đã thử các cách sau:
pcap_process.terminate()
result = pcap_process.stdout.read() # or readline(), etc.
Nhưng (trừ khi tôi đang làm điều gì đó sai), điều đó không hiệu quả; Tôi đã giết quá trình, bây giờ không còn gì để đọc. Nếu tôi sử dụng read()
hoặc communicate()
trước khi chấm dứt, tập lệnh của tôi sẽ chỉ ngồi đó và đọc và bật, đợi tcpdump
để kết thúc (điều đó sẽ không).
Có cách nào để thực hiện việc này (tốt nhất là không có vòng lặp) không?
Bạn cần phải vượt qua từng tham số cho 'tcpdump' riêng:' Popen ([ 'tcpdump', '-s', '0', '-w', '-', 'tcp'], ...) '. Đối số đơn '-w -' không được hiểu giống như hai đối số' -w' và '-', v.v. –
Đúng, đó sẽ là câu trả lời đúng :) Cảm ơn anyways! –