这个程序基本上是一个脚本,通过实际ping每个ip来扫描子网中的每个主机。 这是我的代码:
#!/usr/bin/python
import os
global lis
print("Scanning the Subnet : ")
subnet_input = '192.168.1.0'
subnet_input = subnet_input.split('.')
for x in range(0,255):
subnet_input[3] = x
str(subnet_input)
new_sub = str(subnet_input[0])+'.'+str(subnet_input[1])+'.'+str(subnet_input[2])+'.'+str(subnet_input[3])
res = os.system("ping -c 4 {}".format(new_sub))
if res==0:
print("{} is Alive".format(new_sub))
str(new_sub)
lis = lis + " " + new_sub
else:
continue
print("[*] ALL ALIVE HOSTS ARE : ")
for i in lis:
print(i)
错误是:
Traceback (most recent call last):
File "./Ping.py", line 16, in <module>
lis = lis + " " + new_sub
NameError: global name 'lis' is not defined
即使我声明了一个全局变量,它也会给我一个错误,说明该变量未定义
答案 0 :(得分:2)
您误解了global
语句的工作原理。
当你声明一个变量global时,告诉python它应该可以在任何地方访问。但是,您仍然需要给它一个值。
在您的代码中,您可以:
global lis
但是你永远不会为lis
分配一个值。因此,当您尝试在此处访问它时:
lis = lis + " " + new_sub
你当然会得到一个NameError。 lis
没有您可以访问的值。
要解决此问题,请将global lis
替换为lis = ""
。执行global lis
然后为其分配值也会有效。但是,由于示例中的所有内容似乎都在全局命名空间中,因此这是不必要的。