程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

python實現掃描局域網指定網段ip

編輯:Python

一、問題由來

工作的局域網中,會接入很多設備,機器人上的網絡設備就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的掃描


  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved