tcpdump 필터와 일치하는 패킷을 본 이후의 시간(초)이 포함된 파일을 유지하고 싶습니다. 목적은 채팅이 많은 클라이언트가 더 이상 네트워크에 연결되지 않는 시기를 확인하는 것입니다. 더 이상 MDNS 쓰레기가 보이지 않으면 그것이 사라졌다고 확신합니다.
sudo tcpdump -l -tttt -i wlan0 port 5353 and src <hostname> | cut -c -19 | xargs -0 -n1 ./timesec.sh
내가 지금까지 얻은 것입니다. timesec.sh
의 입력 매개변수를 사용하여 date -d
파일에 저장된 날짜와 비교한 다음 파일의 초를 업데이트합니다.
cut
그러나 작동하지 않으며 출력이 예상대로 파이프되지 않는 것 같습니다 .
답변1
내 생각에는 -0
xargs 명령줄에서 이것을 제거해야 할 것 같습니다. 내가 아는 한 지원되지 않는 -0
null 종료로 필드를 구분하는 데 사용됩니다 . 대신 개행에서 종료 필드를 cut
사용하는 것이 좋습니다 .-d '\n'
... | cut -c -19 | xargs -d '\n' -n1 ./timesec.sh
~에서문서
-0
입력은 공백이 아닌 널 문자로 종료되며 따옴표와 백슬래시는 특별하지 않습니다(각 문자는 문자 그대로 사용됩니다). 다른 매개변수처럼 처리되는 파일 끝 문자열을 비활성화합니다. 입력에 공백, 따옴표 또는 백슬래시가 포함될 수 있는 경우 유용합니다. GNU find -print0 옵션은 이 패턴에 적합한 입력을 생성합니다.
--delimiter=구분자
-d 구분
입력 용어는 지정된 문자로 끝납니다. 따옴표와 백슬래시는 특별하지 않습니다. 입력의 모든 문자는 문자 그대로 처리됩니다. 다른 매개변수처럼 처리되는 파일 끝 문자열을 비활성화합니다. 이 옵션은 입력이 개행으로 구분된 항목으로만 구성되어 있을 때 사용할 수 있지만 가능하면 --null을 사용하도록 프로그램을 설계하는 것이 거의 항상 더 좋습니다. 지정된 구분 기호는 단일 문자, C 스타일 문자 이스케이프(예: \n) 또는 8진수 또는 16진수 이스케이프 코드일 수 있습니다. 8진수 및 16진수 이스케이프 코드는 printf 명령으로 이해됩니다. 멀티바이트 문자는 지원되지 않습니다.