2013-04-19 3 views
4

캡처하지 내 쉘 스크립트 cap.sh은 다음과 같습니다 :는 tcpdump가 나는 TCP 프로그램을 시작하고 관련 패킷을 캡처 할 것도

sudo tcpdump -i eth0 -w mypcap & 
    sleep 3 
    ./tcp_receiver 
    sleep 2 
    x=`ps -ef|grep "tcpdump"|grep -v "grep"|awk '{print $2}'` 
    sudo kill -9 $x 

내가 너무

cap.sh

sudo ./cap.sh 
을 실행 실제로이 셸에서 암호를 없이 sudo을 실행할 수 있고 호스트는 원격 컴퓨터 (PLanetlab 노드)의 가상 슬라이스 에 있지만프로세스를 볼 수는 있습니다. ps -ef 에서은 내가 cap.sh 완료

잠재적 인 이유가 무엇인지

mypcap 파일이 0 바이트 참조 아무것도 를 캡처하지? 그리고 쉘 스크립트에서 tcpdump를 만드는 방법은 패킷을 캡처합니까? 덕분에 !

답변

4

kill -9을 사용하지 마십시오. 버퍼링 된 데이터가 디스크에 쓰여지는 것이 아니라 버려 지도록함으로써 거의 항상 잘못된 행동을 취할뿐만 아니라 여기에서 문제를 일으킬 수도 있습니다. 일반 오래된 살인을 사용하거나 kill -2.

또 다른 옵션은 -U 옵션을 추가하여 모든 패킷 이후 출력 버퍼를 플러시하는 것입니다.

+1

프로세스 목록을 grepping하여 PID를 찾는 것도 나쁜 생각입니다. tcpdump의 다른 인스턴스가 있으면 해당 프로세스도 종료됩니다. 대신,이 대답을 사용하여 tcpdump를 시작한 후에 PID를 저장하십시오 : http://stackoverflow.com/a/1911387/138329. – bradreaves

0

하나의 잠재적 인 이유 : eth0이 가상화 된 환경에 존재하지 않습니다.