Python网络安全:Nmap库实现端口扫描与漏洞检测
作为一个程序员,咱们经常需要关注网络安全。今天咱们就来聊聊如何用Python的Nmap库做端口扫描和漏洞检测。这个库可是个宝藏,不仅能帮咱们找出网络中的漏洞,还能让咱们更好地了解网络结构。
要用Nmap库,咱们得先装上它。打开终端,输入下面的命令:
搞定!这样咱们就能在Python代码里导入nmap模块了。
来,咱们先从简单的开始。下面是个基础的端口扫描例子:
import nmap
scanner = nmap.PortScanner()
target = '192.168.1.1' # 这是目标IP,记得换成你要扫描的
scanner.scan(target, '1-1024') # 扫描前1024个端口
for host in scanner.all_hosts():
print(f'主机 {host} 状态: {scanner[host].state()}')
for proto in scanner[host].all_protocols():
print(f'协议 : {proto}')
ports = scanner[host][proto].keys()
for port in ports:
print(f'端口 : {port}\t状态 : {scanner[host][proto][port]["state"]}')
这段代码会扫描目标IP的前1024个端口,然后把结果打印出来。挺简单吧?
温馨提示:记得只扫描你有权限的网络哦,不然可能会惹上麻烦。
Nmap还能帮咱们猜测目标主机的操作系统。看看这个:
import nmap
scanner = nmap.PortScanner()
target = '192.168.1.1'
scanner.scan(target, arguments='-O')
if 'osmatch' in scanner[target]:
for os in scanner[target]['osmatch']:
print(f'操作系统:{os["name"]},准确度:{os["accuracy"]}%')
else:
print('哎呀,没猜出来操作系统')
这代码会试着猜测目标主机的操作系统,还会告诉你它有多确定。不过这个功能需要root权限,所以普通用户可能用不了。
想知道目标主机上跑的是啥服务吗?来,试试这个:
import nmap
scanner = nmap.PortScanner()
target = '192.168.1.1'
scanner.scan(target, arguments='-sV')
for host in scanner.all_hosts():
for proto in scanner[host].all_protocols():
ports = scanner[host][proto].keys()
for port in ports:
service = scanner[host][proto][port]
print(f'端口 : {port}\t服务 : {service["name"]}\t版本 : {service.get("version", "未知")}')
这段代码会告诉你每个开放端口上运行的服务和版本。知道服务版本很重要,因为老版本可能有已知的漏洞。
有时候咱们需要更灵活的扫描。Nmap支持各种扫描类型,咱们可以用arguments参数来自定义:
import nmap
scanner = nmap.PortScanner()
target = '192.168.1.1'
scanner.scan(target, arguments='-p 22,80,443 -sS -sV -O')
for host in scanner.all_hosts():
print(f'主机 : {host}')
print(f'状态 : {scanner[host].state()}')
for proto in scanner[host].all_protocols():
print(f'协议 : {proto}')
ports = scanner[host][proto].keys()
for port in ports:
print(f'端口 : {port}\t状态 : {scanner[host][proto][port]["state"]}')
if 'product' in scanner[host][proto][port]:
print(f'服务 : {scanner[host][proto][port]["product"]}')
这个例子只扫描了22、80和443端口,用的是SYN扫描(-sS),还探测了服务版本(-sV)和操作系统(-O)。
扫描大型网络时,同步扫描可能会很慢。咱们可以用异步方式来加速:
import nmap
import asyncio
async def scan_host(target):
scanner = nmap.PortScanner()
results = await asyncio.to_thread(scanner.scan, target, '1-1024')
return results
async def main():
targets = ['192.168.1.1', '192.168.1.2', '192.168.1.3']
tasks = [scan_host(target) for target in targets]
results = await asyncio.gather(*tasks)
for result in results:
print(result)
asyncio.run(main())
这段代码会同时扫描多个目标,大大提高效率。不过要小心,别一下子扫描太多目标,可能会被当成攻击。
网络安全是个深不可测的领域,咱们今天只是浅尝辄止。用Python和Nmap库,咱们就能做出强大的网络扫描工具。不过记住,这种工具要谨慎使用,只在你有权限的网络上测试。多练习,多学习,保护好自己的网络安全!
◆ Python_GUI自动化测试PyAutoGUI:3天开发一个自动化办公助手
◆ 用Python搭建个人博客:程序员的颜值担当就是你
◆ Python时间处理利器Arrow:7个日期时间操作技巧,代码简洁度提升150%25!