下面是详细的攻略:
简介
本攻略是为了介绍如何使用Python编程语言和nmap工具来扫描在线设备并尝试进行AAA(认证、授权、计费)登录。
namp是一款经典的网络扫描工具,可以对目标进行端口扫描、操作系统识别、服务识别等,而要实现AAA登录,则需要借助MySQL数据库以及Python语言。
步骤
1. 安装nmap以及Python-nmap
首先需要安装nmap和Python-nmap模块,可以使用以下命令进行安装:
sudo apt-get install nmap
pip install python-nmap
2. 创建MySQL数据库
创建一个MySQL数据库,包含3个表:用户表、设备表和日志表,其中分别存储用户信息、设备信息、用户登录日志等。
3. 编写Python脚本
接下来编写Python脚本,实现以下功能:
- 扫描局域网中的在线设备,并将结果保存到设备表中。
- 读取设备表中的设备信息,依次尝试使用保存的用户名和密码进行登录,将登录成功/失败的结果保存到日志表中。
以下是具体的示例代码:
import nmap
import pymysql
def scan_network():
nm = nmap.PortScanner()
nm.scan(hosts='192.168.0.1/24', arguments='-n -sP -PE -PA21,23,80,3389')
for host in nm.all_hosts():
if nm[host].state() == 'up':
ip = nm[host]['addresses']['ipv4']
mac = nm[host]['addresses']['mac']
vendor = nm[host]['vendor'][mac] if 'vendor' in nm[host] else ''
insert_device(ip, mac, vendor)
def login_devices():
db = pymysql.connect("localhost", "user", "password", "database")
cursor = db.cursor()
cursor.execute("SELECT * FROM devices")
devices = cursor.fetchall()
for device in devices:
ip = device[0]
username = device[1]
password = device[2]
if login_device(ip, username, password):
log_device(ip, username, "Login succeeded")
else:
log_device(ip, username, "Login failed")
def insert_device(ip, mac, vendor):
db = pymysql.connect("localhost", "user", "password", "database")
cursor = db.cursor()
cursor.execute("INSERT INTO devices VALUES ('{}', '', '{}', '{}')".format(ip, mac, vendor))
db.commit()
def login_device(ip, username, password):
# 使用telnet或ssh协议进行AAA登录,登录成功返回True,否则返回False
pass
def log_device(ip, username, status):
db = pymysql.connect("localhost", "user", "password", "database")
cursor = db.cursor()
cursor.execute("INSERT INTO logs VALUES ('{}', '{}', '{}', NOW())".format(ip, username, status))
db.commit()
if __name__ == '__main__':
scan_network()
login_devices()
上述代码中,scan_network()函数用于扫描网络中的在线设备,将结果保存到设备表中;login_devices()函数用于读取设备表中的设备信息,依次进行AAA登录,并将登录成功/失败的结果保存到日志表中;insert_device()函数用于向设备表中插入设备信息;login_device()函数用于进行AAA登录;log_device()函数用于向日志表中插入日志信息。
4. 运行脚本
最后运行Python脚本,即可进行扫描和AAA登录的操作。运行结果将保存到MySQL数据库中,可以根据日志信息进行后续分析。
示例说明
示例1:扫描网络中的在线设备
假设当前主机的IP地址为192.168.0.100,执行如下命令可以扫描该主机所在的网络中的在线设备:
import nmap
nm = nmap.PortScanner()
nm.scan(hosts='192.168.0.1/24', arguments='-n -sP -PE -PA21,23,80,3389')
for host in nm.all_hosts():
if nm[host].state() == 'up':
print('Online host: %s (%s)' % (host, nm[host]['addresses']['mac']))
执行结果如下:
Online host: 192.168.0.1 (B8:27:EB:36:BA:57)
Online host: 192.168.0.2 (00:50:DA:B8:2C:0E)
Online host: 192.168.0.100 (B8:27:EB:C2:33:A6)
可以看到,当前网络中有3台在线的设备,分别是192.168.0.1、192.168.0.2和192.168.0.100。
示例2:进行AAA登录
假设当前网络中有一台名为“switch”的设备,需要进行AAA登录,使用如下命令可以进行登录:
import telnetlib
HOST = '192.168.0.10'
USER = 'admin'
PASSWORD = 'admin'
tn = telnetlib.Telnet(HOST)
tn.read_until(b"Username: ")
tn.write(USER.encode('ascii') + b"\n")
tn.read_until(b"Password: ")
tn.write(PASSWORD.encode('ascii') + b"\n")
其中,HOST是目标设备的IP地址,USER和PASSWORD是登录的用户名和密码。如果登录成功,则可以继续进行后续操作。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python通过nmap扫描在线设备并尝试AAA登录(实例代码) - Python技术站