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
세 가지 인수가 전달됩니다.
shell
tcpdump
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
명령이 전달됨 을 의미합니다.
shell
tcpdump
'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)'