我正在开发一个帮助我学习python的项目。我意识到我可能正在重新发明轮子,因为那里可能有一个ping模块。如果是这样,请不要建议,因为这个项目是为了帮助我学习python。
我不会详细介绍整个项目。目前,我只是尝试将ping命令的输出分配给变量。在大多数情况下,我只对ping输出的某个部分感兴趣。当地址存在时,代码工作正常。所以我的问题是如何解决这个问题,以便在网络地址不存在且ping返回否定结果时它可以正常工作?
#! /usr/bin/perl
import subprocess
p1 = subprocess.check_output("ping -q -o -t 4 192.168.1.113", shell=True)
ping1 = p1[131:137]
print ping1
结果如下
>>> ================================ RESTART ================================
>>>
0.0%
>>>
当IP地址不存在时,我得到以下内容:
>>> ================================ RESTART ================================
>>>
Traceback (most recent call last):
File "/Users/dmartin/scripts/python/netscan/netscanv2.py", line 6, in <module>
p1 = subprocess.check_output("ping -q -o -t 4 192.168.1.114", shell=True)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/subprocess.py", line 575, in check_output
raise CalledProcessError(retcode, cmd, output=output)
CalledProcessError: Command 'ping -q -o -t 4 192.168.1.114' returned non-zero exit status 2
答案 0 :(得分:2)
你应该抓住那个例外并以这种方式处理案件。
import subprocess
try:
p1 = subprocess.check_output("ping -q -o -t 4 192.168.1.113", shell=True)
ping1 = p1[131:137]
print ping1
except CalledProcessError, e:
if "status 2" in str(e):
print "IP address does not exist."
else:
print "Process error encountered: " + str(e)
答案 1 :(得分:1)
检查手册页(man ping
)。 Ping返回2表示ping已成功发送,但您没有收到回复。另请检查here here
尝试ping www.google.com (8.8.4.4
或8.8.8.8
)并查看是否有效。
答案 2 :(得分:0)
谢谢TheSoundDefense
尝试:除了:像魅力一样工作。我搜索其他论坛的算法,并决定放弃处理异常。我试过但我不明白如何为&#34; CalledProcessError&#34;创建一个例外。也许我会回到它的额外信贷。它也很有趣,因为我可以使用$ ping1 = ping -1 -o -t 192.168.113
在perl中轻松搞定这个。我并不是想开始一场战争,但到目前为止,看起来python并不像perl那样对系统进行打击。现在,我将继续我的计划。我一开始并没有提到这个,但我正在创建一个通用的网络扫描仪。
答案 3 :(得分:0)
#! /usr/bin/python
import commands
#ping -q -o -t 4 192.168.1.113
pingout = open('pingresults', 'a')
min = raw_input("Please enter minimum network range to be scanned ")
max = raw_input("please enter maximum network rant to be scanned ")
iplist = list(range(int(min),int(max)))
for ip in iplist:
ipadrs = "192.168.2."+str(ip)
#results = os.system("ping -q -o -t 4 ipadrs")
#pingout.write(results)
command_str = "ping -q -o -t 4 "+ipadrs+" | grep packets | awk -F \" \" \'{print $7}\' | awk -F \"\.\" \'{print $1}\'"
output1 = commands.getoutput(command_str)
output2 = int(output1)
print ipadrs+" "+output1
if output2 == 100:
pingout.write(ipadrs+" No device is attached to this ip address\n ")
else:
pingout.write(ipadrs+" A device is attached to this ip address\n ")
pingout.close()