linux下快速列出局域网中所有主机名(计算机名)的脚本
这篇文章主要介绍了linux下快速列出局域网中所有主机名(计算机名)的脚本,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
最近有列出局域网中所有主机名的需求(SMB协议里的),但是findsmb命令总是列不全,搜了搜网上也没什么现成的解决方案,于是自己写了个python脚本
脚本会扫描局域网arp表中所有ip,并尝试解析其主机名,这样可以较为彻底地列出相关信息。
注意,运行这个脚本需要samba-common-bin和arp-scan这两个包,没有的请先apt install它们。
用法:直接运行或用python3运行,然后输入需要扫描的网卡名(network interface)(不知道的运行ifconfig可查,一般是ens33、eth0等,出现在该命令输出最左列),然后回车等待,可能需要运行几分钟。
需要root权限运行!!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 | #!/usr/bin/env python3 import os def shellrun(cmd): a = os.popen(cmd) b = a. read () c = b. split ( '\n' ) return c def cutarpresult(lst): a = [] b = [] for line in lst[2:]: if line != '' : a.append(line) else : break for line in a: b.append(line. split ( '\t' )[0]) return b def commandmaker(ip): return 'nmblookup -A ' + ip def getrst(iplist): rst = [] for ip in iplist: rst.append(shellrun(commandmaker(ip))) return rst def washrst(rst): rtn = [] for line in rst: if line[1]. split ( ' ' )[1] != 'reply' : rtn.append(line[:-1]) return rtn def main(): interface = input( 'which interface to use: ' ) iplist = cutarpresult(shellrun( 'arp-scan -I ' + interface + ' -l' )) for rs in washrst(getrst(iplist)): for line in rs: print(line) if __name__ == '__main__' : main() |
到此这篇关于linux下快速列出局域网中所有主机名(计算机名)的脚本的文章就介绍到这了