내가 하고 싶은 일은 간단하다고 생각하는데, 그렇게 할 수 있는 방법을 찾을 수 없습니다.
이 명령을 입력하면:
[root@:Active] tmp # tcpdump -i any -s 65535 host 192.168.1.110 and port 1645 or port 1813 -v
-X | grep -o 'Start'
Start
Start
...
...
...
Start
Start
10047 packets captured
10046 packets received by filter
0 packets dropped by kernel
나는 많은 시작 우연의 일치를 가지고 있지만 (tcpdump 명령이 실행되는 동안) 쉘에 실제로 얼마나 많은 "시작"이 표시되는지 계산하고 싶습니다.
wc -l을 추가해 보았습니다.
[root@:Active] tmp # tcpdump -i any -s 65535 host 192.168.1.110 and port 1645 or port 1813 -v
-X | grep -o 'Start' | wc -l
tcpdump: listening on any, link-type EN10MB (Ethernet), capture size 65535 bytes
하지만 여전히 아무 것도 없습니다. tcpdump 출력으로 파일을 저장한 다음 계산하고 싶지 않습니다. 이미 표시된 출력 라인을 실시간으로 계산하기만 하면 됩니다.
또한 xargs와 몇 가지 조합을 시도했지만 여전히 셀 수 없습니다. "wc -l" "grep -c" 및 이와 유사한 명령을 사용하려면 파일을 가리키고 계산해야 한다고 생각하지만 tcpdump의 출력이 메모리의 어디에 저장되어 있는지 모르겠습니다.
좋은 아이디어가 있으시면 감사하겠습니다 :D.
나는 여전히 뭔가 어리석은 것을 놓치고 있다고 생각합니다. 이 줄은 이미 셸에 표시되어 있으며 파일을 저장하거나 tcpdump를 중지하지 않고 그 중 몇 개가 있는지 계산하면 됩니다.
그동안 나는 계속 노력할 것이고 몇몇 친구들은 AWK 언어로 이것을 할 수 있다고 말했습니다.
모두를 기원합니다.
답변1
출력을 "시작"하는 대신 계산을 원하는 것 같습니다.
표시 개수:
tcpdump -i any -s 65535 host 192.168.1.110 and port 1645 or port 1813 -v -X |
awk '/Start/ {c++;print c} {}'
행 개수 및 개수 표시:
tcpdump -i any -s 65535 host 192.168.1.110 and port 1645 or port 1813 -v -X |
awk '/Start/ {c++; print c, $0} {}'
같은 줄에 개수를 표시합니다.
tcpdump -i any -s 65535 host 192.168.1.110 and port 1645 or port 1813 -v -X |
awk '/Start/ {c++; printf "\r%d", c} {} END {print}'