Python实用第三方库集合-网络篇

xiaoxiao2021-02-27  206

Python实用第三方库集合-网络篇

个人用过的感觉比较好的Python第三方库集合,会不断更新,欢迎大家关注。(注:部分代码示例来源网络和书籍,并非原创。)


网络相关模块

1.python-nmap

0x01 简介:

python 使用nmap进行扫描的接口,nmap可以生成基于XML的输出,python-nmap库可以很好的解析这类基于XML的输出,这让我们可以在python脚本中使用nmap的全部功能。

0x02 安装: 安装python-nmap前,确保已安装nmap。

pip install python-nmap

0x03 示例:

import nmap tgthost = '192.168.45.65' tgtport = '80' nmScan = nmap.PortScanner() nmScan.scan(tgthost, tgtport) state = nmScan[tgthost]['tcp'][int(tgtport)]['state'] print "[*] " + tgthost + " tcp/" + tgtport + " " + state

详细用法请看官方文档。

2.pexpect

0x01 简介: Python与ssh,ftp,telnet等应用交互的模块,可以用于各种自动化流程与测试等。

0x02 安装:

pip install pexpect

0x03 示例: 以下是与SSH服务器交互过程,包括初次登录认证流程,与命令的发送:

import pexpect PROMPT = ['# ', '>>> ', '> ','\$ '] #命令发送模块 def send_command(child, cmd): child.sendline(cmd) child.expect(PROMPT) print child.before #认证交互模块 def connect(user, host, password): ssh_newkey = 'Are you sure you want to continue connecting' connStr = 'ssh ' + user + '@' + host child = pexpect.spawn(connStr) ret = child.expect([pexpect.TIMEOUT, ssh_newkey,'[P|p]assword:']) if ret == 0: print '[-] Error Connecting' return if ret == 1: child.sendline('yes') ret = child.expect([pexpect.TIMEOUT, '[P|p]assword:']) if ret == 0: print '[-] Error Connecting' return child.sendline(password) child.expect(PROMPT) return child def main(): #SSH服务器地址 host = 'localhost' #用户名 user = 'root' #密码 password = 'toor' child = connect(user, host, password) send_command(child, 'cat /etc/shadow | grep root') if __name__ == '__main__': main()

与ftp,telnet等交互和其他详细用法请参考官方文档

3.Pxssh

0x01 简介: Pxssh 是一个包含了pexpect库的专用脚本,它能用预先写好的login()、logou()和prompt()等函数直接与SSH交互,使用Pxssh可以简化上面pexpect与ssh服务器交互的过程。

0x02 安装:

pip install pexpect

0x03 示例: 以下是与SSH服务器交互过程,包括初次登录认证流程,与命令的发送:

import pxssh #命令发送模块 def send_command(s, cmd): s.sendline(cmd) s.prompt() print s.before #认证交互模块 def connect(user, host, password): try: s = pxssh.pxssh() s.login(host, user, password) return s except: print '[-] Error Connecting' exit(0) s = connect('127.0.0.1', 'root', 'toor') send_command(s, 'cat /etc/shadow | grep root')

Pxssh源码及其他详细用法请参考官方文档。

4. pygeoip

0x01 简介: pygeoip 是一个查询GeoLiteCity数据库的纯Python库,开源数据库GeoLiteCity可以让我们可以足够准确地把IP地址与其所在的城市一一对应起来。

0x02 安装: 1.先到官网下载GeoLiteCity数据库,解压文件到自己喜欢的目录,如我的为:

/home/daydup/geoIP/GeoLiteCity.dat

2.安装pygeoip

pip install pygeoip

0x03 示例: 以下实现输入ip地址,通过查询GeoLiteCity数据库,输出ip所在的城市与经纬度等,在进行网络流量分析的时候具有很好的实用性:

#printGeo.py import pygeoip import optparse def printRecord(tgt): gi = pygeoip.GeoIP('/home/daydup/geoIP/GeoLiteCity.dat') #修改为自己的目录 rec = gi.record_by_name(tgt) city = rec['city'] #region = rec['region_name'] country = rec['country_name'] Long = rec['longitude'] Lat = rec['latitude'] print '[*] Target: ' + tgt + ' Geo-located. ' print '[+] ' + str(city) +', '+str(country) print '[+] Latitude: ' + str(Lat) + ', Longitude: ' + str(Long) def main(): #参数处理模块 parser = optparse.OptionParser("usage%prog -I <tarhet IP>") parser.add_option('-I', dest='tgtIP', type='string', \ help='specify target IP') (options, args) = parser.parse_args() tgt = options.tgtIP #判断用户输入参数是否合理 tmp = tgt.split('.') if len(tmp) == 4: if 0<=int(tmp[0])<=255 and 0<=int(tmp[1])<=255 and \ 0<=int(tmp[2])<=255 and 0<=int(tmp[3])<=255: printRecord(tgt) else: print "[-] plese input a correct IP address" else: print "[-] plese input a correct IP address" if __name__ == '__main__': main()

用法:

python printGeo.py -I 172.165.45.25

结果:

[*] Target: 172.165.45.25 Geo-located. [+] None, United States [+] Latitude: 37.751, Longitude: -97.822

pygeoip详细用法请参考官方文档。

5. dpkt

0x01 简介: dpkt是一快速,简单处理网络数据包的python模块,它可以创建和分析数据包。

0x02 安装:

pip install dpkt

0x03 示例: 以下代码实现分析pcap格式的抓包文件,打印出源IP和目的IP。

#printDirection.py import dpkt import socket def printPcap(pcap): for (ts, buf) in pcap: try: eth = dpkt.ethernet.Ethernet(buf) ip = eth.data src = socket.inet_ntoa(ip.src) dst = socket.inet_ntoa(ip.dst) print '[+] Src: ' + src + ' --> Dst: ' + dst except: pass def main(): f = open('test.pcap') #pcap文件目录 pcap = dpkt.pcap.Reader(f) printPcap(pcap) if __name__ == '__main__': main()

dpkt详细用法请参考官方文档。

6. Scapy

0x01 简介: Scapy是一个强大的python第三方网络数据包处理库,可以对网络数据流量,进行嗅探、分析、构建或者对网络进行攻击,如果有需要,是一个很值得学习的模块。

0x02 安装: Scapy的安装相对来说较为复杂,在Linux系统上相对简单,在Windows和Mac OS上相对复杂一点,具体安装方法,请查看官方文档

0x03 示例: 以下代码使用Scapy实现网络的嗅探,以及打印出数据包的源IP地址和TTL字段:

#printTTL.py from scapy.all import * def testTTL(pkt): try: if pkt.haslayer(IP): ipsrc = pkt.getlayer(IP).src ttl = str(pkt.ttl) print '[+] Pkt Received From: ' + ipsrc + 'with TTL: ' + ttl except: pass def main(): sniff(prn=testTTL, store=0) if __name__ == '__main__': main()

Scapy详细用法请参考官方文档。

7. IPy

0x01 简介: IPy是一个简单易用的IPv4,IPv6网络地址处理Python第三方工具,可以判断输入地址为是否为内网地址(10.0.0.0~10.255.255.255, 172.16.0.0~172.31.255.255, 192.168.0.0~192.168.255.255),还是公网地址。

0x02 安装:

pip install IPy

0x03 示例: 以下代码使用IPy判断输入的IP地址为内网地址,还是私有地址:

from IPy import IP ip = '192.168.5.4' print IP(ip).iptype()

结果:

'PRIVATE'

8. netaddr

0x01 简介: netaddr模块能方便地对子网和IP地址进行操作。

0x02 安装:

pip install netaddr

0x03 示例: 1.以下代码使用netaddr判断输入的IP地址是否在某一子网内:

from netaddr import IPNetwork ip = "192.168.44.5" if ip in IPNetwork("192.168.44.0/24"): print true

2.以下代码打印子网内所有地址:

from netaddr import IPNetwork for ip in IPNetwork("192.168.44.0/24"): print ip

netaddr详细用法参考官方文档。

9. Paramiko

0x01 简介: Paramiko是一个python的SSHv2协议应用的第三方库,使用它可以按自己的想法创建SSH服务器或者SSH客户端。

0x02 安装: 1.安装cryptography( 注:部分windows系统使用pip安装可能会有问题,查看官方文档。)

pip install cryptography

2.安装Paramiko

pip install paramiko

0x03 示例: 以下代码实现了一个简单SSH客户端,连接SSH服务器,并发送一条命令。

import paramiko def ssh_command(ip, user, passwd, command): client = paramiko.SSHClient() #可以选择使用公钥体制认证 #client.load_host_keys('/home/daydup/.ssh/known_hosts') client.set_missing_host_key_policy(paraniko.AutoAddPolicy()) client.connect(ip, username=user, password=passwd) ssh_session = client.get_transport().open_session() if ssh_session.active: ssh_session.exec_command(command) print ssh_session.recv(1024) return ssh_command('192.168.44.25', 'hello', 'world', 'pwd')

结果:

'/home/hello'

Paramiko其它详细用法请参考官方文档。

转载请注明原文地址: https://www.6miu.com/read-10061.html

最新回复(0)