Python批量化获取ip地址归属地

前言

今天碰到个需求,拿nuclei扫出的洞需要判断一下是哪些国家的目标,这总不能手工一个个去看吧,好几千个目标一个个看那简直蠢到不行,既然这样就拿python写一个脚本来自动化判断咯。

实现

ip2region: https://github.com/lionsoul2014/ip2region

主要实现方法是通过开源的ip2region库,这个库可以准确的识别IP地址的归属地

代码中的from ip2Region import Ip2Region可能会爆红,忽略即可。

# -*- coding:utf-8 -*-
import re
import socket
import time
from urllib.parse import urlparse

import xlwt
from ip2Region import Ip2Region

def testSearch(ip_s):
    dbFile = "./ip2region.db"
    searcher = Ip2Region(dbFile)
    try:
        print("开始检测:", (ip_s))
        sTime = time.time() * 1000
        data = searcher.binarySearch(ip_s)
        # elif algorithm == "memory":
        #     data = searcher.memorySearch(line)
        # else:
        #     data = searcher.btreeSearch(line)
        eTime = time.time() * 1000
        ip_info = ("%s|%s|%s" % (ip_s, data["city_id"], data["region"].decode('utf-8')))
        print("检测完成:" + ip_info)
        return ip_info

    except Exception as e:
        print("[Error]: %s" % e)
    searcher.close()

def all_in():
    row_id = 1
    book = xlwt.Workbook()
    sheet = book.add_sheet('sheet')
    title = ['源ip', '国家', '省市', '运营商']
    print("正在提取ip")
    patternIp()
    print("正在提取域名")
    patterDomain()
    for col in range(len(title)):
        sheet.write(0, col, title[col])
    with open('ip.txt', 'r') as file:
        for line in file.readlines():
            ip = line.strip()
            try:
                data = testSearch(ip)
                ct = data.split('|')[2].strip()
                pv = data.split('|')[4].strip()
                city = data.split('|')[5].strip()
                yys = data.split('|')[6].strip()
                if ct == "0":
                    print("地址库中未找到对应的IP归属地,请更新地址库或者确定ip准确性!")
                    sheet.write(row_id, 0, ip)
                    sheet.write(row_id, 1, "/")
                    sheet.write(row_id, 2, "/")
                    sheet.write(row_id, 3, "/")
                    row_id += 1
                else:
                    if pv == "0":
                        print("省市查询为空!")
                        sheet.write(row_id, 0, ip)
                        sheet.write(row_id, 1, ct)
                        sheet.write(row_id, 2, "/")
                        sheet.write(row_id, 3, "/")
                        row_id += 1
                    else:
                        if city == "0":
                            sheet.write(row_id, 0, ip)
                            sheet.write(row_id, 1, ct)
                            sheet.write(row_id, 2, pv + "-" + "///")
                            sheet.write(row_id, 3, "/")
                            row_id += 1
                        else:
                            if yys == "0":
                                sheet.write(row_id, 0, ip)
                                sheet.write(row_id, 1, ct)
                                sheet.write(row_id, 2, pv + "-" + city)
                                sheet.write(row_id, 3, "/")
                                row_id += 1
                            else:
                                sheet.write(row_id, 0, ip)
                                sheet.write(row_id, 1, ct)
                                sheet.write(row_id, 2, pv + "-" + city)
                                sheet.write(row_id, 3, yys)
                                row_id += 1
            except Exception as e:
                print("[Error]: %s" % e)
                sheet.write(row_id, 0, ip)
                sheet.write(row_id, 1, "检测异常,请手动检测!")
                row_id += 1
    book.save('score.xls')

def patternIp():
    reg = r"\b(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b"
    with open('wso2-upload.txt', 'r') as f:
        ipList = re.findall(reg, f.read())

    with open('ip.txt', "w") as i:
        for ip in ipList:
            i.write(ip + "\n")

def domain2Ip(domain):
    global address
    try:
        time.sleep(0.1)
        address = socket.getaddrinfo(domain, 'http')
    except Exception as e:
        print(e)
    return address[0][4][0]

def patterDomain():
    reg = 'http[s]?://(?:[a-zA-Z]|[0-9]|[$-_@.&+]|[!*\(\),]|(?:%[0-9a-fA-F][0-9a-fA-F]))+'
    with open('wso2-upload.txt', 'r') as f:
        urlList = re.findall(reg, f.read())

    with open("ip.txt", "w") as i:
        for u in urlList:
            i.write(domain2Ip(get_domain(u)) + "\n")

def get_domain(url):
    o = urlparse(url)
    domain = o.hostname
    return domain

if __name__ == "__main__":
    all_in()
    # patternIp()
    # print(domain2Ip("www.baidu.com"))
    # print(get_domain("https://www.baidu.com"))
    # patterDomain()

项目目录结构:

效果

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇