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