资产管理探测流程
存活探测:获取存活的IP列表
主机探测:获取系统信息(SN、版本、MAC)
主机关系探测:识别宿主机和虚拟机关系
网络设备探测:探测网络设备信息(SN、设备名),使用snmp协议
主机存活探测协议
- ICMP(Internet Control Message Protocol)Internet控制报文协议。它是TCP/IP协议簇的一个子协议,用于在IP主机、路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、路 由是否可用等网络本身的消息。这些控制消息虽然并不传输用户数据,但是对于用户数据的传递起着重要的作用。
- 传输控制协议(TCP,Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流的传输层通信协议。
主机存活探测模块和工具
Nmap探测工具
Nmap,也就是Network Mapper,最早是Linux下的网络扫描和嗅探工具包。是一款用于网络发现和安全审计的网络安全工具。
主机发现 - 识别网络上的主机。
nmap -n -sP 192.168.211.0/24
运行结果:
OS检测 - 确定网络设备的操作系统和硬件特性。
nmap -O 192.168.211.128
运行结果:
Nmap的Python操作接口:python-nmap
安装nmap的第三方模块:pip install python-nmap
Nmap具体代码调用:
举例:查看局域网内存活的ip
代码
import nmap
nm = nmap.PortScanner()
result = nm.scan(hosts='192.168.211.0/24',arguments='-n -sP')
hosts = nm.all_hosts()
print(hosts)
运行结果:
SSH端口存活扫描
使用telnet命令探测主机列表是否属于Linux服务器
telnet命令探测
telnet 192.168.211.128 22
运行结果:
telnetlib模块探测
判断查询的服务器是否是linux服务器
代码:
import telnetlib
import re
tn = telnetlib.Telnet(host='192.168.211.128',port=22,timeout=5)
tn_result = tn.read_until(b'\n',timeout=5).decode('utf-8')
ssh_result = re.search(pattern=r'ssh',string=tn_result,flags=re.I)
if ssh_result:
print("linux server is alive")
else:
print("linux servier isn't alive")
运行结果:
Python的SSH登录模块paramiko
paramiko:paramiko是一个用于做远程控制的模块,使用该模块可以对远程服务器进行命令或文件操作,paramiko是用python语言写的一个模块,遵循SSH2协议,支持以加密和认证的方式,进行远程服务器的连接。
安装paramiko
pip install -i https://pypi.douban.com/simple paramiko
paramiko核心组件
paramiko包含了两个核心组件SSHClient和SFTPClient(sftp=ssh file transfer protocol)
- SSHClient的作用类似于Linux的ssh命令,是对SSH会话的封装,该类封装了传输(Transport),通道(Channel)及SFTPClient建立的方法(open_sftp),通常用于执行远程命令。
- SFTPClient的作用类似与Linux的sftp命令,是对SFTP客户端的封装,用以实现远程文件操作,如文件上传、下载、修改文件权限等操作。
基于paramiko实现ssh客户端密码远程登录
import paramiko
client = paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
client.connect(hostname='192.168.211.128',port=22,
username='root',password='westos')
stdin,stdout,stderr = client.exec_command('df -h')
print(stdout.read().decode('utf-8'))
运行结果: