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)'

안드로이드 머신에서.

예를 들어, 동일한 문제가 존재합니다 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)'

관련 정보