2017-04-14 1 views
0

sudo를 모드에서 하위 프로세스에서 실행 깨끗하게 종료 OSError 나는 wiresharkpcap 파일을 열려고 할 때 다음과 같은 오류 상자를 얻을 : 나는했습니다어떻게 tcpdump와 코드의 조각을 사용하여, 나는 웹 사이트의 추적을 캡처 <code>python</code>에서 <code>subprocess</code> 모듈을 사용하여 <code>tcpdump</code>를 실행하고

The capture file appears to have been cut short in the middle of a packet.

을 동일한 문제에 대한 this 해결책을 읽고 모두 SIGINTSIGTERM을 보내려고했으나 OSError과 함께 각 경우에 똑같은 잘린 패킷 메시지가 표시됩니다. 또한 process.terminate()을 사용해 보았지만 그 중 하나는 작동하지 않습니다. sudo 모드에서 실행 중일 때 tcpdump을 정상적으로 종료 할 수있는 방법이 있습니까? 감사!

+1

내가 아는 부분이 아니지만 'pcap'파일을 복구 할 수있는 도구가있는 것 같습니다. 'pcapfix'. –

+0

OSError에 대한 자세한 내용은 무엇입니까? 'OSError, e : print e'를 제외하고 시도해 볼 수 있습니까? – Kadir

+0

@Kadir OSError : [Errno 1] 조작이 허용되지 않습니다. ' – QPTR

답변

1

OSError 같이 [ERRNO 1 동작 처리가 허용되지 않는 사망 제안 허용되지 않는다. sudo을 사용 했으므로 프로세스를 강제 종료하면 sudo도 인스턴스화해야합니다. 어쩌면 당신은 이것을 시도 : tcpdump 이후

import subprocess 
import os 
from tbselenium.tbdriver import TorBrowserDriver 

site = "check.torproject.org" 

try: 
    process = subprocess.Popen(['sudo', 'tcpdump', '-l', '-i', 'eth0', '-w', 'trace.pcap'], stdout=subprocess.PIPE) 

    with TorBrowserDriver("/path/to/tor-browser_en-US/") as driver: 
     driver.load_url("https://" + site, wait_on_page=20) 

    cmd = "sudo kill " + str(process.pid) 
    os.system(cmd) 
except OSError, e: 
    print e 
+0

고맙습니다. 캡처 된 패킷 수를 깨끗하게보고 종료합니다. 그리고'wireshark '에 의해 잘린 패킷이보고되지 않았습니다. – QPTR

0

는 SU 권한은 단순히 SU로 스크립트를 실행하고는 tcpdump를 생성하기 전에 확인할 수 있습니다 필요 : 실행할 수있는

# Check we are running as root: 
if os.geteuid() != 0: 
    print('This script requires root privileges to capture packets. Try running this script as root.') 
    raise SystemExit 

# Start TCPDUMP 
import subprocess, os 
_process = subprocess.Popen(['tcpdump', '-nnvvv', '-s0', '-w', os.path.join('/tmp', 'output.pcap'), ]) 

이 방법

_process.terminate() 

또는

_process.kill() 

올바른 신호를 보내려면 tcpdump

관련 문제