python 使用SubnetTree實現ip跟ip段匹配並輸出ip段所在的歸屬。

鄙人工作中遇到要通過ip地址查詢ip歸屬的問題,ip歸屬是客戶提供的ip段和自有業務的對應表ip_attribute.txt ,

1.1.1.0/24 客戶;
2.2.2.0/32 辦公;
192.168.1.1/32 自有;

(1)下載安裝包

wget https://pypi.python.org/packages/8b/25/e5c59119ad0db85bb3e94037e3767dfdd6ca7b10e6a425ad49de554c6e83/pysubnettree-0.26.tar.gz


(2)解壓安裝組件: tar zxvf pysubnettree-0.26.tar.gz

     cd pysubnettree-0.26.tar.gz
      python setup.py install

(3)下面貼上腳本

#! /usr/bin/python
#-*-coding:utf-8 -*-

'''
Author: wendianfei
Date: 20180509
Description:
    1、yum install python-devel.x86_64
    2、insall pysubnettree-0.26.tar.gz.       python setup.py install
    3、python ./dns_attr.py
'''

import SubnetTree
import commands
import os
import sys 
import time
 
def get_ip_attr(ip, ip_attr):
    if ip in ip_attr:
        result = ip_attr[ip]
    else:
        result = "未知IP屬性"
    return result

if __name__ == "__main__": 
    ###ip屬性文件
    ip_attr = SubnetTree.SubnetTree()
    for line in open('./ip_attribute.txt'):
        if "#" != line[0] and len(line)  > 13 and line[0] != "!":
            line = line.strip('\n')
            line = line[:-1]
            array = line.split();
            ip_attr[array[0]] = "%s" % array[1]
    #print  get_ip_attr('221.176.202.86', ip_attr)
    #要查詢的ip文件和結果文件
    f_sd = open('ip.txt','r')
    re_sd = open('re_sd.txt','w')
    for line in f_sd.readlines():
        line = line.strip('\n')
        if len(line) < 7:
            continue
        s = get_ip_attr(line, ip_attr)
        print line.strip()+' '+s
        re_sd.write(line.strip()+' '+s+'\n')

腳本B,利用IPY模塊匹配

#wget https://files.pythonhosted.org/packages/88/28/79162bfc351a3f1ab44d663ab3f03fb495806fdb592170990a1568ffbf63/IPy-0.83.tar.gz

#tar -xf IPy-0.83.tar.gz

#cd IPy-0.83 

# python setup.py build

#python setup.py install

#encoding = utf-8
"""
   ip 
    """
import sys
reload(sys)
sys.setdefaultencoding('utf-8')

import IPy

f1 = open('ip.txt','r')
f2 = open('ip_attribute.txt','r')

for line1 in f1.readlines():
    for line2 in f2.readlines():
        if (line1 in IPy.IP(line2.strip('\n').split(' ')[0])) is True:
            str = line1.strip('\n') + ' ' +line2.strip('\n').split(' ')[1]
            print str

 


 

 

發佈了31 篇原創文章 · 獲贊 30 · 訪問量 20萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章