个人用过的感觉比较好的Python第三方库集合,会不断更新,欢迎大家关注。(注:部分代码示例来源网络和书籍,并非原创。)
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
详细用法请看官方文档。
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等交互和其他详细用法请参考官方文档
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源码及其他详细用法请参考官方文档。
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 " )
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详细用法请参考官方文档。
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详细用法请参考官方文档。
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详细用法请参考官方文档。
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'
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详细用法参考官方文档。
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其它详细用法请参考官方文档。