buffer -B 옵션을 사용한 tcpdump의 파이프 출력

buffer -B 옵션을 사용한 tcpdump의 파이프 출력

다음 명령을 사용하여 Ubuntu 16.04LTS에서 tcpdump의 출력을 처리하고 있습니다.

$ sudo tcpdump -i wlan0 -e -s 64 -n -j adapter -K -l | python script.py

이것은 작동하지만 불행하게도 내가 작성하려는 스크립트를 처리하기에는 패킷이 너무 많아서 동일한 IP 주소에서 들어오는 패킷을 100ms마다 한 번씩 제거하고 싶습니다. tcpdump 맨페이지에는 이 작업을 수행하는 방법이 없습니다. 그렇게 할 수 있는 방법이 있나요?

를 사용하여 버퍼 크기를 조정할 수 있다는 것을 알았지 -B만 테스트 Python 스크립트를 사용하여 다음을 실행하려고 하면(단순히 stdin에서 읽은 내용을 출력합니다):

$ sudo tcpdump -i wlan0 -e -s 64 -n -j adapter -K -B 64 -l | python test.py

터미널에 빈 줄만 출력됩니다. 버퍼가 어떻게 작동하는지 이해가 되지 않습니다. 왜냐하면 버퍼를 스크립트로 파이프하지 않으면 다음을 사용하여 터미널로의 출력이 제대로 작동하기 때문입니다.

$ sudo tcpdump -i wlan0 -e -s 64 -n -j adapter -K -B 64 -l

(파이썬 스크립트):

import sys

while True:
    print sys.stdin.readline()

출력되는 각 IP 주소에서 초당 패킷 수를 효과적으로 제한하는 방법이 있는지, 그렇지 않은 경우 -B 옵션이 어떻게 작동하는지, 그리고 이와 같은 Python 스크립트로 파이프될 수 있는지 설명할 수 있습니까?

답변1

시행착오 끝에 -B 옵션에서 256보다 낮은 값을 시도하면 실패한다는 사실을 알게 되었습니다. 따라서 이것이 다른 사람에게 도움이 되는 경우 최소한-B 256

관련 정보