1.使用python-nmap进行端口扫描
python-nmap是对nmap的封装,它会将输出结果保存在字典中。使用只需要创建一个PortScanner对象,再调用对象的scan的方法进行扫描。
>>> import nmap
>>> nm = nmap.PortScanner()
>>> nm.scan('192.168.1.107','22-1000')
{'nmap': {'command_line': 'nmap -oX - -p 22-1000 -sV 192.168.1.107', 'scaninfo': {'tcp': {'method': 'syn', 'services': '22-1000'}}, 'scanstats': {'timestr': 'Sat Sep 12 15:09:39 2020', 'elapsed': '42.80', 'uphosts': '1', 'downhosts': '0', 'totalhosts': '1'}}, 'scan': {'192.168.1.107': {'hostnames': [{'name': '', 'type': ''}], 'addresses': {'ipv4': '192.168.1.107'},
......
#查看命令行参数
>>> nm.command_line()
'nmap -oX - -p 22-1000 -sV 192.168.1.107'
#查看扫描方法
>>> nm.scaninfo()
{'tcp': {'method': 'syn', 'services': '22-1000'}}
#查看主机列表
>>> nm.all_hosts()
['192.168.1.107']
#查看单台主机的状态
>>> nm['192.168.1.107'].state()
'up'
#查看单台主机对应的服务
>>> nm['192.168.1.107']['tcp'][443]
2.使用IPy进行IP地址管理
1)IP管理
IPy模块有一个IP类。
#查询IP类型
>>> IP('192.168.1.0').iptype()
'PRIVATE'
>>> IP('8.8.8.8').iptype()
'PUBLIC'
#得到IP的整数形式
>>> IP('192.168.1.0').int()
3232235776
#得到IP的十六进制形式
>>> IP('192.168.1.0').strHex()
'0xc0a80100'
#得到IP的二进制形式
>>> IP('192.168.1.0').strBin()
'11000000101010000000000100000000'
#将整数型IP形式转换为IP地址
>>> IP(3232235776)
IP('192.168.1.0')
2)网段管理
计算子网IP数
>>> IP('192.168.1.0/24').len()
256
>>> ips = IP('192.168.1.0/24')
>>> ips.len()
256
>>> for ip in ips:
... print(ip)
...
192.168.1.0
192.168.1.1
192.168.1.2
IP类有一个strNormal的方法,该方法接受一个wantprefixlen的参数,参数的取值为0-3,每一个值代表一种网段的显示方式。
>>> ips.strNormal(0)
'192.168.1.0'
>>> ips.strNormal(1)
'192.168.1.0/24'
>>> ips.strNormal(2)
'192.168.1.0/255.255.255.0'
>>> ips.strNormal(3)
'192.168.1.0-192.168.1.255'
判断IP是否属于某个网段
ips = IP('192.168.1.0/24')
>>> '192.168.1.1' in ips
True
>>> '192.168.0.1' in ips
False
判断子网是否包含于另一个网段中
>>> IP('192.168.1.0/28') in ips
True
>>> IP('192.168.0.0/16') in ips
False
获取子网掩码以及广播地址
>>> ips.netmask()
IP('255.255.255.0')
>>> ips.broadcast()
IP('192.168.1.255')
3.使用dnspython解析DNS
dnspython提供了一个dns解析类resolver,它的resolve方法可以实现域名查询功能。
dns.resolver.query(qname,rdtype=1,rdclass=1,tcp=False,source=None,raise_on_on_answer=True,source_port=0)
qname:查询的域名
rdtype:指定RR资源(A/NS/MX/CNAME/PTR)
rdclass:网络类型
tcp:指定查询是否启用tcp
source:查询源的地址
source_port:查询源的端口
raise_on_on_answer:指定查询无应答时是否触发异常,默认为True
>>> data = dns.resolver.resolve('fangxiaoxiong.com','A')
>>> for item in data.response.answer:
... print(item)
...
fangxiaoxiong.com. 5 IN A 47.103.65.197
「 文章如果对你有帮助,请点个赞哦^^ 」 
0
若无特殊注明,文章均为本站原创或整理发布。
转载请注明本文地址:https://om.fangxiaoxiong.com/2898.html