tcpdump 필터 표현식이 adb를 통해 중단됨

tcpdump 필터 표현식이 adb를 통해 중단됨

Android 태블릿에 tcpdump를 설치하고 루트 adb 쉘에서 명령을 실행했습니다. 내 근무 시간은 다음과 같습니다.tcpdump 매뉴얼 페이지 예, 특히 이건:

포트 80 안팎의 모든 IPv4 HTTP 패킷을 인쇄합니다. 즉, 데이터가 포함된 패킷만 인쇄됩니다. 예를 들어 SYN 및 FIN 패킷과 ACK 패킷만 인쇄되지 않습니다.

tcpdump 'tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)'

데스크탑(Ubuntu)에서 위 명령을 실행하면 정상적으로 실행됩니다. Android 기기에서 다음과 같이 실행하려고 하면:

adb shell tcpdump 'tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)'

다음 오류가 발생합니다.

/system/bin/sh: can't create 2)) != 0): Read-only file system
/system/bin/sh: here document missing
tcpdump: syntax error

다음 명령은 Android 장치에서 제대로 작동합니다.

tcpdump 'tcp port 80'

필터 표현식이 올바르게 구문 분석되지 않은 것 같습니다. 그러나 솔직히 그것이 정확히 어떻게 작동하는지 잘 모르기 때문에 문제 해결을 어디서부터 시작해야 할지 모르겠습니다. 무엇이 잘못되었는지 또는 해결 방법에 대한 아이디어가 있습니까?

답변1

따옴표로 인해 명령에 adb세 가지 매개변수가 전달됩니다.

  1. shell
  2. tcpdump
  3. tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)

그런 다음 명령을 실행하려고 시도할 수 있습니다.

tcpdump tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)

아니요Android 컴퓨터에서 따옴표를 사용합니다(명령을 입력한 컴퓨터의 셸이 따옴표를 제거했기 때문입니다).

당신은 할 수 있습니다

adb shell tcpdump "'tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)'"

이는 adb명령이 전달됨 을 의미합니다.

  1. shell
  2. tcpdump
  3. 'tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)'

이렇게 하면 명령을 실행하려고 시도합니다.

tcpdump 'tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)'

Android 컴퓨터에서.

예를 들어, 동일한 문제가 존재합니다 ssh.

ssh localhost tcpdump 'tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)'

오류가 발생함

bash: -c: line 0: syntax error near unexpected token `('
bash: -c: line 0: `tcpdump tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)'

답변2

이 명령이 정확하게 해석되지 않는 부분이 어디인지는 아직 확실하지 않지만, 그렇지 않은 경우 더 이상 문제가 발생하지 않습니다.

adb shell tcpdump 'tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)'

먼저 셸을 열고 tcpdump를 실행합니다.

adb shell
tcpdump 'tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)'

관련 정보