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

이것은 작동하지만 불행하게도 내가 작성하려는 스크립트에 대해 처리할 패킷이 너무 많아서 100밀리초 정도마다 동일한 IP 주소에서 패킷을 삭제하려고 합니다. 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

관련 정보