【发布时间】:2019-06-12 15:37:45
【问题描述】:
我希望得到与此 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 包含“来自的字节”的行。 最后,它将根据分隔符“”(一个空格)选择第 4 列。第 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
能帮我摆脱这个噩梦吗?
谢谢!
炸薯条
【问题讨论】:
标签: python-2.7 shell subprocess pipe