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