148 lines
3.9 KiB
Python
148 lines
3.9 KiB
Python
|
|
"""
|
|||
|
|
检查当前IP地址的工具脚本
|
|||
|
|
用于微信公众平台IP白名单配置
|
|||
|
|
"""
|
|||
|
|
import requests
|
|||
|
|
|
|||
|
|
|
|||
|
|
def get_public_ip():
|
|||
|
|
"""获取当前公网IP地址"""
|
|||
|
|
print("正在获取当前公网IP地址...\n")
|
|||
|
|
|
|||
|
|
# 尝试多个IP查询服务
|
|||
|
|
services = [
|
|||
|
|
("https://api.ipify.org?format=json", "ip"),
|
|||
|
|
("https://ipinfo.io/json", "ip"),
|
|||
|
|
("https://api.ip.sb/ip", None),
|
|||
|
|
]
|
|||
|
|
|
|||
|
|
for url, key in services:
|
|||
|
|
try:
|
|||
|
|
response = requests.get(url, timeout=5)
|
|||
|
|
if response.status_code == 200:
|
|||
|
|
if key:
|
|||
|
|
data = response.json()
|
|||
|
|
ip = data.get(key)
|
|||
|
|
else:
|
|||
|
|
ip = response.text.strip()
|
|||
|
|
|
|||
|
|
print(f"✓ 当前公网IP: {ip}")
|
|||
|
|
print(f" (来源: {url})")
|
|||
|
|
return ip
|
|||
|
|
except Exception as e:
|
|||
|
|
print(f"✗ 查询失败 ({url}): {e}")
|
|||
|
|
continue
|
|||
|
|
|
|||
|
|
print("\n所有IP查询服务都失败了,请手动访问以下网站查看IP:")
|
|||
|
|
print(" - https://www.ip.cn/")
|
|||
|
|
print(" - https://ipinfo.io/")
|
|||
|
|
return None
|
|||
|
|
|
|||
|
|
|
|||
|
|
def check_ip_format(ip):
|
|||
|
|
"""检查IP格式是否正确"""
|
|||
|
|
if not ip:
|
|||
|
|
return False
|
|||
|
|
|
|||
|
|
parts = ip.split('.')
|
|||
|
|
if len(parts) != 4:
|
|||
|
|
return False
|
|||
|
|
|
|||
|
|
try:
|
|||
|
|
for part in parts:
|
|||
|
|
num = int(part)
|
|||
|
|
if num < 0 or num > 255:
|
|||
|
|
return False
|
|||
|
|
return True
|
|||
|
|
except ValueError:
|
|||
|
|
return False
|
|||
|
|
|
|||
|
|
|
|||
|
|
def is_private_ip(ip):
|
|||
|
|
"""检查是否为内网IP"""
|
|||
|
|
if not ip:
|
|||
|
|
return False
|
|||
|
|
|
|||
|
|
parts = [int(p) for p in ip.split('.')]
|
|||
|
|
|
|||
|
|
# 检查常见内网IP段
|
|||
|
|
if parts[0] == 10:
|
|||
|
|
return True
|
|||
|
|
if parts[0] == 172 and 16 <= parts[1] <= 31:
|
|||
|
|
return True
|
|||
|
|
if parts[0] == 192 and parts[1] == 168:
|
|||
|
|
return True
|
|||
|
|
if parts[0] == 127:
|
|||
|
|
return True
|
|||
|
|
|
|||
|
|
return False
|
|||
|
|
|
|||
|
|
|
|||
|
|
def main():
|
|||
|
|
"""主函数"""
|
|||
|
|
print("="*60)
|
|||
|
|
print("微信公众平台IP白名单配置工具")
|
|||
|
|
print("="*60)
|
|||
|
|
|
|||
|
|
# 获取公网IP
|
|||
|
|
ip = get_public_ip()
|
|||
|
|
|
|||
|
|
if ip:
|
|||
|
|
print(f"\n{'='*60}")
|
|||
|
|
print("IP地址检查")
|
|||
|
|
print(f"{'='*60}")
|
|||
|
|
|
|||
|
|
# 检查IP格式
|
|||
|
|
if check_ip_format(ip):
|
|||
|
|
print(f"✓ IP格式正确: {ip}")
|
|||
|
|
else:
|
|||
|
|
print(f"✗ IP格式错误: {ip}")
|
|||
|
|
return
|
|||
|
|
|
|||
|
|
# 检查是否为内网IP
|
|||
|
|
if is_private_ip(ip):
|
|||
|
|
print(f"✗ 警告: 这是一个内网IP地址!")
|
|||
|
|
print(f" 内网IP无法添加到微信公众平台白名单")
|
|||
|
|
print(f" 请确保你使用的是公网IP")
|
|||
|
|
else:
|
|||
|
|
print(f"✓ 这是一个公网IP地址")
|
|||
|
|
|
|||
|
|
# 提供配置指导
|
|||
|
|
print(f"\n{'='*60}")
|
|||
|
|
print("配置步骤")
|
|||
|
|
print(f"{'='*60}")
|
|||
|
|
print(f"\n1. 登录微信公众平台: https://mp.weixin.qq.com/")
|
|||
|
|
print(f"2. 进入: 设置与开发 > 基本配置")
|
|||
|
|
print(f"3. 找到: IP白名单")
|
|||
|
|
print(f"4. 点击: 修改")
|
|||
|
|
print(f"5. 添加IP: {ip}")
|
|||
|
|
print(f"6. 保存设置")
|
|||
|
|
|
|||
|
|
print(f"\n{'='*60}")
|
|||
|
|
print("注意事项")
|
|||
|
|
print(f"{'='*60}")
|
|||
|
|
print(f"- 最多可以添加10个IP地址")
|
|||
|
|
print(f"- 如果IP经常变化,可以添加IP段(如: {'.'.join(ip.split('.')[:3])}.0/24)")
|
|||
|
|
print(f"- 修改后立即生效,无需等待")
|
|||
|
|
print(f"- 配置完成后,重新运行爬虫脚本测试")
|
|||
|
|
|
|||
|
|
print(f"\n{'='*60}")
|
|||
|
|
print("测试命令")
|
|||
|
|
print(f"{'='*60}")
|
|||
|
|
print(f"python crawler/wechat_crawler.py")
|
|||
|
|
print(f"python crawler/baidu_map_crawler.py")
|
|||
|
|
|
|||
|
|
else:
|
|||
|
|
print("\n无法自动获取IP地址,请手动查询:")
|
|||
|
|
print("1. 访问 https://www.ip.cn/")
|
|||
|
|
print("2. 或访问 https://ipinfo.io/")
|
|||
|
|
print("3. 将显示的IP地址添加到微信公众平台白名单")
|
|||
|
|
|
|||
|
|
print(f"\n{'='*60}")
|
|||
|
|
print("完成!")
|
|||
|
|
print(f"{'='*60}")
|
|||
|
|
|
|||
|
|
|
|||
|
|
if __name__ == "__main__":
|
|||
|
|
main()
|