Python网络安全:Nmap库实现端口扫描与漏洞检测

点击上方关注我们!

Python网络安全:Nmap库实现端口扫描与漏洞检测

作为一个程序员,咱们经常需要关注网络安全。今天咱们就来聊聊如何用Python的Nmap库做端口扫描和漏洞检测。这个库可是个宝藏,不仅能帮咱们找出网络中的漏洞,还能让咱们更好地了解网络结构。


安装Nmap库

要用Nmap库,咱们得先装上它。打开终端,输入下面的命令:


pip install python-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!

点赞分享


流向你


免责声明:文章内容不代表本站立场,本站不对其内容的真实性、完整性、准确性给予任何担保、暗示和承诺,仅供读者参考,文章版权归原作者所有。如本文内容影响到您的合法权益(内容、图片等),请及时联系本站,我们会及时删除处理。查看原文

为您推荐