我想获得与此shell代码相同的输出:
$ ping -c 1 192.168.1.18 | egrep "bytes from" | cut -d " " -f4
192.168.1.18:
此shellcode将ping 1次192.168.1.10。 然后它将grep包含“ bytes from”的行。 最后,它将基于定界符“”(空白)选择第4列。第四列只是IP地址。
我认为我已经接近解决方案,但是在处理子流程功能时遇到了一些麻烦。
这是我的python代码:
#!/usr/bin/python
import subprocess
ps1 = subprocess.Popen(('ping','-c','1','10.11.1.220'), stdout=subprocess.PIPE)
ps2 = subprocess.Popen(('egrep', '-i', 'bytes from'), stdin=ps1.stdout, stdout=subprocess.PIPE)
subprocess.call(['cut', '-d', '" "','-f','4'], stdin=ps2.stdout)
这是我通过以下代码得到的结果:
$ py ping-sweep.py
cut: the delimiter must be a single character
Try 'cut --help' for more information.
$ grep: write error: Broken pipe
我想我很接近,因为只有一根烟斗的结果很好。
证明:
ps1 = subprocess.Popen(('ping','-c','1','10.11.1.220'), stdout=subprocess.PIPE)
subprocess.call(['egrep', '-i', 'bytes from'], stdin=ps1.stdout)
结果输出:
$ py ping-sweep.py
64 bytes from 10.11.1.220: icmp_seq=1 ttl=128 time=114 ms
能帮助我摆脱这场噩梦吗?
谢谢!
铁饼
答案 0 :(得分:0)
关于该主题,以前有答案,您很可能需要用“ \”转义两个
答案 1 :(得分:0)
" "
是带有单个空格的字符串的Shell语法。由于您不再运行Shell,因此应使用与Python等效的' '
:
subprocess.call(['cut', '-d', ' ', '-f', '4'], stdin=ps2.stdout)
'" "'
是由三个字符组成的字符串,这就是cut
抱怨多个分隔符的原因。