tcpdump에서 출력을 캡처하는 방법

tcpdump에서 출력을 캡처하는 방법

tcpdump의 출력을 캡처하여 두 번째 명령의 입력으로 사용하고 싶습니다. 그런데 나는 pcap 형식을 사용하고 싶지 않습니다!

나는 노력했다

sudo tcpdump -q ip > ./out.txt

파일을 볼 때 전체 STDOUT이 항상 파일에 기록되는 것을 보았지만 새 내용으로만 파일을 덮어쓰게 될 것으로 예상했습니다. 터미널에 쓸 때 모든 STDOUT이 버퍼링되거나 지워집니까?

  • STDOUT에서 부분 업데이트만 읽을 수 있는 방법이 있습니까?
  • tcpdump에서 다른 cmd로 출력을 지속적으로 리디렉션하려면 어떻게 해야 합니까?

이것이 작동합니까?

sudo tcpdump -q ip | my_command

답변1

tcpdump줄마다 파일을 항상 덮어쓰려면 다음을 수행하십시오.

sudo tcpdump -l -q ip | awk '{system("echo " $0 " > out")}'

다른 명령에 대한 출력을 사용하려면, 예를 들어awk

  • $3= 세 번째 열만

    sudo tcpdump -l -q ip | awk '{print $3}'
    
  • 필터링 기준tcp

    sudo tcpdump -l -q ip | awk '/tcp/ {print $0}'
    
  • 또는 조합:

    sudo tcpdump -l -q ip | awk '/tcp/ {"echo " $0 " > out"}'
    

~에서man tcpdump

   -l     Make  stdout  line  buffered.
          Useful if you want to see the data while capturing it.
          E.g.,
                 tcpdump -l | tee dat
          or
                 tcpdump -l > dat & tail -f dat

관련 정보