增加运维机器人单元
This commit is contained in:
1 parent
479d263b88
commit
1b60ab0a2e
42 files changed
+20469
No files matched your search
Executable
+97
@@ -0,0 +1,97 @@
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
一个基于python-nmap的局域网Ping扫描工具
|
||||
"""
|
||||
import argparse
|
||||
import sys
|
||||
import socket
|
||||
|
||||
def scan_network(network="192.168.1.0/24", timeout=3, verbose=False):
|
||||
"""使用nmap -sn模式扫描局域网"""
|
||||
try:
|
||||
import nmap
|
||||
except ImportError:
|
||||
print("❌ 错误:缺少 python-nmap 库,请执行: pip install python-nmap")
|
||||
sys.exit(1)
|
||||
|
||||
nm = nmap.PortScanner()
|
||||
arguments = f"-sn -T{4 if timeout > 3 else 3} --max-rtt-timeout={timeout * 1000}ms"
|
||||
if verbose:
|
||||
arguments += " -v"
|
||||
|
||||
print(f"🔍 正在扫描网段: {network}")
|
||||
print(f"⏱️ 超时设置: {timeout}秒")
|
||||
print(f"{'📋 详细模式: 开启' if verbose else '📋 详细模式: 关闭'}")
|
||||
print("-" * 50)
|
||||
|
||||
try:
|
||||
result = nm.scan(hosts=network, arguments=arguments)
|
||||
except Exception as e:
|
||||
print(f"❌ 扫描失败: {e}")
|
||||
print("💡 提示:请确保已安装 nmap (sudo apt install nmap) 并有足够权限")
|
||||
sys.exit(1)
|
||||
|
||||
alive_hosts = []
|
||||
for host in nm.all_hosts():
|
||||
if nm[host].state() == "up":
|
||||
alive_hosts.append(host)
|
||||
hostname = ""
|
||||
try:
|
||||
hostname = socket.gethostbyaddr(host)[0]
|
||||
except (socket.herror, socket.gaierror):
|
||||
hostname = "(未知)"
|
||||
|
||||
mac = ""
|
||||
try:
|
||||
if 'mac' in nm[host]['addresses']:
|
||||
mac = nm[host]['addresses']['mac']
|
||||
except (KeyError, TypeError):
|
||||
pass
|
||||
|
||||
line = f"✅ {host}"
|
||||
if verbose:
|
||||
if hostname and hostname != "(未知)":
|
||||
line += f" [{hostname}]"
|
||||
if mac:
|
||||
line += f" MAC: {mac}"
|
||||
print(line)
|
||||
|
||||
print("-" * 50)
|
||||
print(f"📊 扫描完成!共发现 {len(alive_hosts)} 台在线主机")
|
||||
return alive_hosts
|
||||
|
||||
|
||||
def main():
|
||||
parser = argparse.ArgumentParser(
|
||||
description="基于python-nmap的局域网Ping扫描工具,快速发现局域网在线设备",
|
||||
epilog="""
|
||||
参数说明:
|
||||
-n NETWORK 指定扫描网段 (默认: 192.168.1.0/24)
|
||||
支持格式: 192.168.1.0/24, 192.168.1.1-254, 192.168.1.1
|
||||
-t TIMEOUT 超时时间,单位秒 (默认: 3)
|
||||
-v 详细输出模式,显示MAC地址和主机名
|
||||
--help 显示本帮助信息
|
||||
|
||||
使用示例:
|
||||
nmapskills # 扫描默认网段 192.168.1.0/24
|
||||
nmapskills -n 10.0.0.0/24 # 扫描 10.0.0.0/24 网段
|
||||
nmapskills -n 192.168.1.1-100 # 扫描 192.168.1.1 到 192.168.1.100
|
||||
nmapskills -n 192.168.1.0/24 -t 5 # 扫描并设置5秒超时
|
||||
nmapskills -n 192.168.1.0/24 -v # 详细模式扫描
|
||||
"""
|
||||
)
|
||||
|
||||
parser.add_argument("-n", default="192.168.1.0/24",
|
||||
help="指定扫描网段 (默认: 192.168.1.0/24)")
|
||||
parser.add_argument("-t", type=int, default=3,
|
||||
help="超时时间,单位秒 (默认: 3)")
|
||||
parser.add_argument("-v", action="store_true",
|
||||
help="详细输出模式,显示MAC地址和主机名")
|
||||
|
||||
args = parser.parse_args()
|
||||
|
||||
scan_network(network=args.n, timeout=args.t, verbose=args.v)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Reference in new issue
Block a user