【太閣課堂】局域網(wǎng)絡內(nèi)如何掃描已連接設備的信息,這三個工具很牛逼,還有Python神腳
基于局域網(wǎng)設備管理考慮,查找局域網(wǎng)絡內(nèi)已連接設備,并獲取到這些設備的IP地址及設備名稱,常用工具有Advanced IP Scanner、Nmap等。
Advanced IP Scanner,是一款可靠且免費的網(wǎng)絡掃描分析LAN,該程序可掃描局域網(wǎng)絡內(nèi)所有設備,下載鏈接:
https://www.advanced-ip-scanner.com/cn/

Nmap,也就是Network Mapper,最早是Linux下的網(wǎng)絡掃描和嗅探工具包,是一個網(wǎng)絡連接端掃描軟件,用來掃描網(wǎng)上開放的網(wǎng)絡端口,用于網(wǎng)絡發(fā)現(xiàn)和安全審計的工具,可以檢測當前局域網(wǎng)內(nèi)已連接設備,及目標主機是否在線,端口開放情況,偵測運行的服務類型及版本信息,偵測操作系統(tǒng)與設備類型等信息,下載鏈接:
https://nmap.org/download.html


Nmap可以在命令行中直接使用,但需要添加環(huán)境變量:

在已安裝Nmap軟件的基礎上,通過Python調(diào)用nmap、netifaces庫,實現(xiàn)局域網(wǎng)內(nèi)已連接設備的掃描,Python相關庫下載地址:
https://pypi.org
(若pip install [package_name]無法使用時,推薦使用該方法)
nmap模塊安裝:進入已解壓路徑下,通過命令python setup.py install進行安裝。


netifaces模塊安裝:進入已解壓路徑下,通過命令python setup.py install進行安裝。(文章來自網(wǎng)絡技術干貨圈)


使用Python源碼如下:
#?LanIpScan.py
import?netifaces
import?nmap
class?LanIpScan:
????#?獲取網(wǎng)關
????def?get_gateways(self):
????????return?netifaces.gateways()['default'][netifaces.AF_INET][0]
????????#?獲取到本地網(wǎng)關地址,這里返回192.168.1.1
????????#?return?dict(dict(netifaces.gateways())['default'])[2][0]
????????#?不推薦使用這種方式,原因是該模塊已經(jīng)定義了一些常量及特定的用法
????#?獲取IP
????def?get_ip_lists(self,?gateway):
????????ip_lists?=?[]
????????for?i?in?range(1,?256):
????????????ip_lists.append('{}{}'.format(gateway[:-1],?i))
????????????#?更改網(wǎng)關的最后一項數(shù)據(jù)并添加到列表中
????????return?ip_lists
????????#?返回列表['192.168.1.1',-->?'192.168.1.255']
????#?查看IP地址
????def?scan_ip_survial(self,?ip):
????????nmScan?=?nmap.PortScanner()
????????nmScan.scan(hosts=ip,?arguments='-sP')
????????try:
???????????nmScan[ip]
???????????return?{'ScanInfo:':?nmScan[ip]}
????????except:
????????????KeyError
????????????return?"此IP地址無效",?ip
????#?獲取設備信息
????def?get_all_devices(self,?ip_lists):
????????survial_devices?=?[]
????????for?ip?in?ip_lists:
????????????scan_result?=?LanIpScan.scan_ip_survial(ip)
????????????if?scan_result:
????????????????survial_devices.append(scan_result)
????????????????print(scan_result)
????????return?survial_devices
if?__name__?==?'__main__':
????LanIpScan?=?LanIpScan()
????gateway?=?LanIpScan.get_gateways()
????ip_lists?=?LanIpScan.get_ip_lists(gateway)
????LanIpScan.get_all_devices(ip_lists)