Python 脚本:获取公网 IPv4 和 IPv6 地址

本方案适合拨号宽带网络环境,当检测到公网IP地址变更时,可联动自动触发MQTT消息推送或邮件通知,实现动态IP的实时监控与告警。

0x01 代码

python 复制代码
import re
import time
import requests

def extract_ip(html):
    """用正则提取 IP(兼容各种格式)"""
    ip_match = re.search(r'\b(?:\d{1,3}\.){3}\d{1,3}\b', html)
    return ip_match.group(0) if ip_match else None

def get_public_ipv4_ip():
    try:
        # 设置伪装请求头
        headers = {
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36',
            'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
            'Accept-Language': 'zh-CN,zh;q=0.9',
            'Connection': 'keep-alive'
        }
        response = requests.get("https://httpbin.org/ip", headers=headers)
        print(response.text)
        ipv4 = extract_ip(response.text)
        return ipv4
    except Exception as e:
        print(e)
        return None

def get_public_ipv6_ip():
    try:
        # 使用多个IP查询API(防止单个API失效)
        services = [
            'https://ident.me',
            'https://api.ipify.org',
            'https://ifconfig.me/ip',
        ]
        
        for url in services:
            try:
                response = requests.get(url, timeout=5)
                if response.status_code == 200:
                    print("fsdfsfs", response.content)
                    return response.text.strip()
            except requests.RequestException:
                continue

        return "Failed to get IP"
    except Exception as e:
        return f"Error: {e}"


def monitor_ip(interval=60):
    """定时检查IP变化(同时监控IPv4和IPv6)"""
    last_ips = {'v4': None, 'v6': None}

    while True:
        current_ips = {
            'v4': get_public_ipv4_ip(),
            'v6': get_public_ipv6_ip()
        }

        for ip_type in ['v4', 'v6']:
            current_ip = current_ips[ip_type]
            last_ip = last_ips[ip_type]

            if current_ip and current_ip != last_ip:
                print(f"[{time.strftime('%Y-%m-%d %H:%M:%S')}] IPv{ip_type} Changed: {current_ip}")
                last_ips[ip_type] = current_ip

        time.sleep(interval)

if __name__ == "__main__":
    print(f"Current Public IP: {get_public_ipv4_ip()} {get_public_ipv6_ip()} ")

    # 开启IP变化监控(每60秒检查一次)
    monitor_ip(interval=60)

0x02 运行效果:

0x99 参考:

Python 爬虫:requests 和 selenium 伪装 headers 和代理应对反爬机制 | XinanCSD.github.io

https://xinancsd.github.io/Python/anti_crawl_strategy.html

相关推荐
lsx2024062 分钟前
C++ 基本的输入输出
开发语言
ZH15455891313 分钟前
Flutter for OpenHarmony Python学习助手实战:GUI桌面应用开发的实现
python·学习·flutter
B站计算机毕业设计超人8 分钟前
计算机毕业设计Hadoop+Spark+Hive招聘推荐系统 招聘大数据分析 大数据毕业设计(源码+文档+PPT+ 讲解)
大数据·hive·hadoop·python·spark·毕业设计·课程设计
B站计算机毕业设计超人9 分钟前
计算机毕业设计hadoop+spark+hive交通拥堵预测 交通流量预测 智慧城市交通大数据 交通客流量分析(源码+LW文档+PPT+讲解视频)
大数据·hive·hadoop·python·spark·毕业设计·课程设计
CodeSheep程序羊14 分钟前
拼多多春节加班工资曝光,没几个敢给这个数的。
java·c语言·开发语言·c++·python·程序人生·职场和发展
独好紫罗兰15 分钟前
对python的再认识-基于数据结构进行-a002-列表-列表推导式
开发语言·数据结构·python
机器学习之心HML17 分钟前
多光伏电站功率预测新思路:当GCN遇见LSTM,解锁时空预测密码,python代码
人工智能·python·lstm
2401_8414956419 分钟前
【LeetCode刷题】二叉树的直径
数据结构·python·算法·leetcode·二叉树··递归
王大傻092822 分钟前
python 读取文件可以使用open函数的 r 模式
python
I'mChloe23 分钟前
PTO-ISA 深度解析:PyPTO 范式生成的底层指令集与 NPU 算子执行的硬件映射
c语言·开发语言