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

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 ")
    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其它详细用法请参考官方文档。

你可能感兴趣的:(python,端口扫描,SSH,TCP,IP,python,库,网络,脚本,xml)