我在Android平板电脑上安装了tcpdump,并正在从根adb shell运行命令。我正在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'
似乎过滤器表达式未正确解析或类似,但老实说,我不确定它的工作原理,因此不确定从哪里开始进行故障排除。关于出什么问题或如何解决的任何想法?
引号引起命令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)'
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句