python实现扫描局域网指定网段ip

版权声明:本文为博主原创文章,转载请注明出处。 https://blog.csdn.net/qq_30650153/article/details/82289785

一、问题由来

工作的局域网中,会接入很多设备,机器人上的网络设备就2个了,一个巨哥红外,一个海康可见光。机器人还有自身的ip。
有时候机器人挂的多了,设备维修更换中,搞来搞去就不记得ip是什么,用自带的软件的确能扫出来,但是这就要开两个windows环境下的软件,耗时耗力,折腾。正好在linux,那简单,敲命令。
nmap -P 192.168.1.0/24
可以扫描出 192.168.1.0~192.168.1.255的全部ip
但是前提是要装过nmap

apt-get install nmap

可总感觉在用高射炮打蚊子——大材小用
那就自己折腾折腾python吧,于是就在网上抄抄改改。

二、python扫描指定网段ip

1、demo

pingS.py

import sys
import os
import time
import _thread
import datetime

def get_os():
    os = platform.system()
    if os == "Windows":
        return "n"
    else:
        return "c"

def ping_ip(ip_str):
    cmd = ["ping", "-{op}".format(op=get_os()),
           "1", ip_str]
    output = os.popen(" ".join(cmd)).readlines()

    flag = False
    for line in list(output):
        if not line:
            continue
        if str(line).upper().find("TTL") >=0:
            flag = True
            break
    if flag:
        print("*** *** *** ip: %s is OK  *** *** ***"%(ip_str))

def find_ip(ip_prefix):
    for i in range(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("start time %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("end time %s"%(time.ctime()))
    print("total takes :",(endTime - startTime).seconds)
  • python3除移thread模块,为了兼容性使用_thread代替,最安全用法是使用threading模块
  • datetime.datetime.now()获取当前时间
  • os = platform.system()判断当前系统类型
  • output = os.popen()调用终端,返回值会保存在output
  • 每次扫描的时长大约是 76 s。

2、运行

python3 pingS.py 1

参数1是指定网段,如果想扫描192.168.5.0~192.168.5.255
则输入:

python3 pingS.py 5

3、打包

pyinstaller -F pingS.py打包成单一可执行文件
用上面的命令前提是已安装pyinstaller——-(pip intsall pyinstaller)

运行完会生成一个pingS的可执行文件

cp pingS /bin

好了,到这一步,任意地方打开终端输入:

pingS 1

都可以完成 192.168.1.0~192.168.1.255的扫描

猜你喜欢

转载自blog.csdn.net/qq_30650153/article/details/82289785