python实现扫描局域网指定网段ip的方法
一、问题由来
工作的局域网中,会接入很多设备,机器人上的网络设备就2个了,一个巨哥红外,一个海康可见光。机器人还有自身的ip。
有时候机器人挂的多了,设备维修更换中,搞来搞去就不记得ip是什么,用自带的软件的确能扫出来,但是这就要开两个windows环境下的软件,耗时耗力,折腾。正好在linux,那简单,敲命令。
nmap-P192.168.1.0/24
可以扫描出192.168.1.0~192.168.1.255的全部ip
但是前提是要装过nmap
apt-getinstallnmap
可总感觉在用高射炮打蚊子——大材小用
那就自己折腾折腾python吧,于是就在网上抄抄改改。
二、python扫描指定网段ip
1、demo
pingS.py importsys importos importtime import_thread importdatetime defget_os(): os=platform.system() ifos=="Windows": return"n" else: return"c" defping_ip(ip_str): cmd=["ping","-{op}".format(op=get_os()), "1",ip_str] output=os.popen("".join(cmd)).readlines() flag=False forlineinlist(output): ifnotline: continue ifstr(line).upper().find("TTL")>=0: flag=True break ifflag: print("*********ip:%sisOK*********"%(ip_str)) deffind_ip(ip_prefix): foriinrange(1,256): ip=('%s.%s'%(ip_prefix,i)) _thread.start_new_thread(ping_ip,(ip,)) time.sleep(0.3) if__name__=="__main__": startTime=datetime.datetime.now() print("starttime%s"%(time.ctime())) net=sys.argv[1] args="".join(("192.168."+net+".1")) ip_prefix='.'.join(args.split('.')[:-1]) find_ip(ip_prefix) endTime=datetime.datetime.now() print("endtime%s"%(time.ctime())) print("totaltakes:",(endTime-startTime).seconds)
python3除移thread模块,为了兼容性使用_thread代替,最安全用法是使用threading模块
datetime.datetime.now()获取当前时间
os=platform.system()判断当前系统类型
output=os.popen()调用终端,返回值会保存在output中
每次扫描的时长大约是76s。
2、运行
python3pingS.py1
参数1是指定网段,如果想扫描192.168.5.0~192.168.5.255
则输入:
python3pingS.py5
3、打包
pyinstaller-FpingS.py打包成单一可执行文件
用上面的命令前提是已安装pyinstaller——-(pipintsallpyinstaller)
运行完会生成一个pingS的可执行文件
cppingS/bin
好了,到这一步,任意地方打开终端输入:
pingS1
都可以完成192.168.1.0~192.168.1.255的扫描
总结
以上所述是小编给大家介绍的python实现扫描局域网指定网段ip的方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对毛票票网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!