diff --git a/README.md b/README.md index 3fa05f1..146503d 100644 --- a/README.md +++ b/README.md @@ -11,6 +11,7 @@ - 📊 详细的日志记录 - ⚙️ 灵活的配置选项 - 🚀 **新增:纯协议版本,无需浏览器窗口** +- 🌍 **新增:自动显示当前IP地址** ## 文件说明 @@ -19,6 +20,7 @@ | `website_traffic_bot.py` | 基础版本,代理配置硬编码在脚本中 | | `website_traffic_bot_config.py` | 配置文件版本,通过config.json配置 | | `website_traffic_bot_protocol.py` | **推荐** 纯协议版本,不打开浏览器 | +| `check_ip.py` | **新增** IP地址检查工具 | | `config.json` | 配置文件,包含代理、目标网站等设置 | | `requirements.txt` | 完整版Python依赖包列表 | | `requirements_protocol.txt` | 纯协议版依赖包列表(仅需requests) | @@ -35,6 +37,7 @@ | 隐蔽性 | 低 | 低 | 高 | | 配置文件支持 | ❌ | ✅ | ✅ | | 登录检测 | ❌ | ❌ | ✅ | +| IP地址显示 | ✅ | ✅ | ✅ | ## 快速开始 @@ -43,6 +46,7 @@ 1. 下载所有文件到同一文件夹 2. 双击运行 `setup_and_run.bat` 3. 选择 **选项3:纯协议版本(推荐)** +4. 或选择 **选项4:IP地址检查工具** 检查代理 ### 手动安装 @@ -55,6 +59,15 @@ pip install -r requirements_protocol.txt python website_traffic_bot_protocol.py ``` +#### IP地址检查工具 +```bash +# 安装requests +pip install requests + +# 检查当前IP地址 +python check_ip.py +``` + #### 完整版本 ```bash # 安装完整依赖(包括selenium) @@ -67,6 +80,50 @@ python website_traffic_bot.py python website_traffic_bot_config.py ``` +## IP地址检查功能 🆕 + +### 自动IP显示 +所有版本的脚本都会在启动时自动显示当前IP地址: + +``` +🌍 当前IP地址: 123.456.789.0 +🌐 代理服务器: your-proxy-host:port +``` + +### 独立IP检查工具 +使用 `check_ip.py` 可以随时检查: + +- ✅ 当前使用的IP地址 +- ✅ 代理是否正常工作 +- ✅ 本地IP与代理IP对比 +- ✅ 多个IP查询服务验证 + +**运行示例:** +```bash +python check_ip.py +``` + +**输出示例:** +``` +🌍 IP地址检查工具 +================================================== +发现代理配置,正在检查代理IP... +🌐 使用代理: proxy-host:port +✅ httpbin.org: 123.456.789.0 +✅ ipify.org: 123.456.789.0 + +为了对比,检查本地IP... +🌐 不使用代理 +✅ httpbin.org: 192.168.1.100 +✅ ipify.org: 192.168.1.100 + +📊 结果对比 +================================================== +✅ 代理工作正常!IP地址已更改 +代理IP: 123.456.789.0 +本地IP: 192.168.1.100 +``` + ## 配置说明 ### config.json 配置项 @@ -103,23 +160,34 @@ python website_traffic_bot_config.py - 执行多次访问,每次访问间有随机延迟 - 可自定义访问次数和延迟范围 +### 3. IP地址检查 +- 快速检查当前IP和代理状态 +- 对比本地IP与代理IP + ## 访问流程 -1. 📍 **模拟GitHub访问** - 设置referrer头,模拟从GitHub跳转 -2. 🏠 **访问主网站** - 访问首页,模拟用户浏览行为 -3. 🎮 **访问游戏页面** - 访问2048游戏,模拟游戏操作 +1. 📍 **显示当前IP** - 验证代理设置 +2. 📍 **模拟GitHub访问** - 设置referrer头,模拟从GitHub跳转 +3. 🏠 **访问主网站** - 访问首页,模拟用户浏览行为 +4. 🎮 **访问游戏页面** - 访问2048游戏,模拟游戏操作 ## 日志文件 -脚本运行时会生成 `traffic_bot.log` 日志文件,记录详细的执行信息。 +脚本运行时会生成 `traffic_bot.log` 日志文件,记录详细的执行信息,包括: + +- ✅ 当前使用的IP地址 +- ✅ 代理服务器信息 +- ✅ 每次访问的详细记录 +- ✅ 错误和警告信息 ## 注意事项 1. **合法使用**:仅用于测试自己的网站 2. **代理设置**:确保代理配置正确且有效 -3. **登录要求**:如果网站需要登录,纯协议版本会自动检测并提示 -4. **网络环境**:确保网络连接稳定 -5. **适度使用**:避免对服务器造成过大负担 +3. **IP验证**:使用IP检查工具验证代理是否正常工作 +4. **登录要求**:如果网站需要登录,纯协议版本会自动检测并提示 +5. **网络环境**:确保网络连接稳定 +6. **适度使用**:避免对服务器造成过大负担 ## 故障排除 @@ -131,6 +199,7 @@ python website_traffic_bot_config.py 2. **代理连接失败** - 检查代理配置是否正确 + - 使用 `check_ip.py` 验证代理连接 - 确认代理服务器可用 3. **网站访问失败** @@ -142,9 +211,14 @@ python website_traffic_bot_config.py - 考虑使用公开访问的页面 - 或在配置中添加登录功能 +5. **IP地址显示问题** + - 使用独立的 `check_ip.py` 工具检查 + - 检查网络连接和代理设置 + ### 版本选择建议 - **首次使用**:推荐纯协议版本 `website_traffic_bot_protocol.py` +- **代理测试**:使用 `check_ip.py` 验证代理设置 - **需要复杂交互**:使用完整版本 - **长期运行**:强烈推荐纯协议版本(资源消耗低) diff --git a/check_ip.py b/check_ip.py new file mode 100644 index 0000000..8f81b0e --- /dev/null +++ b/check_ip.py @@ -0,0 +1,146 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +""" +IP地址检查工具 +用于检查当前使用的IP地址和代理设置 +""" + +import requests +import json +import os + +def load_proxy_config(): + """加载代理配置""" + config_file = 'config.json' + if os.path.exists(config_file): + try: + with open(config_file, 'r', encoding='utf-8') as f: + config = json.load(f) + return config.get('proxy') + except: + return None + return None + +def get_ip_info(use_proxy=True): + """获取IP信息""" + session = requests.Session() + + # 设置代理 + proxy_config = load_proxy_config() if use_proxy else None + if proxy_config: + proxy_url = f"http://{proxy_config['username']}:{proxy_config['password']}@{proxy_config['host']}:{proxy_config['port']}" + session.proxies = { + 'http': proxy_url, + 'https': proxy_url + } + print(f"🌐 使用代理: {proxy_config['host']}:{proxy_config['port']}") + else: + print("🌐 不使用代理") + + # IP查询服务 + services = [ + { + 'name': 'httpbin.org', + 'url': 'https://httpbin.org/ip', + 'parse': lambda r: r.json().get('origin', 'N/A') + }, + { + 'name': 'ipify.org', + 'url': 'https://api.ipify.org?format=json', + 'parse': lambda r: r.json().get('ip', 'N/A') + }, + { + 'name': 'ipinfo.io', + 'url': 'https://ipinfo.io/json', + 'parse': lambda r: f"{r.json().get('ip', 'N/A')} ({r.json().get('city', 'N/A')}, {r.json().get('country', 'N/A')})" + }, + { + 'name': 'ifconfig.me', + 'url': 'https://ifconfig.me/ip', + 'parse': lambda r: r.text.strip() + } + ] + + results = [] + + for service in services: + try: + print(f"正在查询 {service['name']}...") + response = session.get(service['url'], timeout=10) + + if response.status_code == 200: + ip_info = service['parse'](response) + results.append({ + 'service': service['name'], + 'ip_info': ip_info, + 'status': 'success' + }) + print(f"✅ {service['name']}: {ip_info}") + else: + results.append({ + 'service': service['name'], + 'ip_info': f"HTTP {response.status_code}", + 'status': 'error' + }) + print(f"❌ {service['name']}: HTTP {response.status_code}") + + except Exception as e: + results.append({ + 'service': service['name'], + 'ip_info': str(e), + 'status': 'error' + }) + print(f"❌ {service['name']}: {e}") + + return results + +def main(): + print("=" * 50) + print("🌍 IP地址检查工具") + print("=" * 50) + print() + + # 检查是否有代理配置 + proxy_config = load_proxy_config() + + if proxy_config: + print("发现代理配置,正在检查代理IP...") + print() + proxy_results = get_ip_info(use_proxy=True) + + print() + print("-" * 30) + print("为了对比,检查本地IP...") + print() + local_results = get_ip_info(use_proxy=False) + + print() + print("=" * 50) + print("📊 结果对比") + print("=" * 50) + + # 提取主要IP地址进行对比 + proxy_ips = [r['ip_info'].split()[0] for r in proxy_results if r['status'] == 'success'] + local_ips = [r['ip_info'].split()[0] for r in local_results if r['status'] == 'success'] + + if proxy_ips and local_ips: + if proxy_ips[0] != local_ips[0]: + print("✅ 代理工作正常!IP地址已更改") + print(f"代理IP: {proxy_ips[0]}") + print(f"本地IP: {local_ips[0]}") + else: + print("⚠️ 代理可能未生效!IP地址相同") + print(f"当前IP: {proxy_ips[0]}") + else: + print("❌ 无法获取足够的IP信息进行对比") + + else: + print("未发现代理配置,检查本地IP...") + print() + get_ip_info(use_proxy=False) + + print() + print("✨ 检查完成!") + +if __name__ == "__main__": + main() \ No newline at end of file diff --git a/setup_and_run.bat b/setup_and_run.bat index a261093..e97c802 100644 --- a/setup_and_run.bat +++ b/setup_and_run.bat @@ -35,9 +35,10 @@ echo 📋 请选择要运行的脚本: echo 1. 基础版本 (website_traffic_bot.py) - 需要Chrome echo 2. 配置文件版本 (website_traffic_bot_config.py) - 需要Chrome echo 3. 纯协议版本 (website_traffic_bot_protocol.py) - 推荐,无需浏览器 -echo 4. 退出 +echo 4. IP地址检查工具 (check_ip.py) - 检查代理和当前IP +echo 5. 退出 -set /p choice="请输入选择 (1/2/3/4): " +set /p choice="请输入选择 (1/2/3/4/5): " if "%choice%"=="1" ( echo. @@ -92,6 +93,19 @@ if "%choice%"=="1" ( echo 💡 此版本不会打开浏览器窗口,更加隐蔽高效 python website_traffic_bot_protocol.py ) else if "%choice%"=="4" ( + echo. + echo 📦 安装依赖包... + pip install requests + if %errorlevel% neq 0 ( + echo ❌ 依赖安装失败! + pause + exit /b 1 + ) + echo. + echo 🔍 运行IP地址检查工具... + echo 💡 此工具将检查您的代理设置和当前IP地址 + python check_ip.py +) else if "%choice%"=="5" ( echo 👋 再见! exit /b 0 ) else ( diff --git a/website_traffic_bot.py b/website_traffic_bot.py index 2d254a3..81499bc 100644 --- a/website_traffic_bot.py +++ b/website_traffic_bot.py @@ -62,6 +62,52 @@ class WebTrafficBot: "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36" ] + def get_current_ip(self): + """获取当前IP地址""" + ip_services = [ + 'https://httpbin.org/ip', + 'https://api.ipify.org?format=json', + 'https://ipinfo.io/json', + 'https://ifconfig.me/ip' + ] + + for service in ip_services: + try: + logger.info(f"正在获取IP地址: {service}") + response = self.session.get(service, timeout=10) + + if response.status_code == 200: + if 'json' in service or 'httpbin' in service or 'ipinfo' in service: + try: + data = response.json() + if 'origin' in data: # httpbin.org + ip = data['origin'] + elif 'ip' in data: # ipify.org 或 ipinfo.io + ip = data['ip'] + else: + ip = str(data) + except: + ip = response.text.strip() + else: + ip = response.text.strip() + + logger.info(f"✅ 当前IP地址: {ip}") + + # 如果配置了代理,显示代理信息 + if self.proxy_config: + logger.info(f"🌐 代理服务器: {self.proxy_config['host']}:{self.proxy_config['port']}") + else: + logger.info("🌐 未使用代理,使用本地IP") + + return ip + + except Exception as e: + logger.warning(f"从 {service} 获取IP失败: {e}") + continue + + logger.error("❌ 无法获取当前IP地址") + return None + def setup_session(self): """设置请求会话""" self.session = requests.Session() @@ -83,6 +129,11 @@ class WebTrafficBot: 'Connection': 'keep-alive', 'Upgrade-Insecure-Requests': '1', }) + + # 获取并显示当前IP + current_ip = self.get_current_ip() + if current_ip: + print(f"🌍 当前IP地址: {current_ip}") def setup_selenium_driver(self): """设置Selenium WebDriver""" diff --git a/website_traffic_bot_config.py b/website_traffic_bot_config.py index a7b0afe..98d9adf 100644 --- a/website_traffic_bot_config.py +++ b/website_traffic_bot_config.py @@ -65,6 +65,53 @@ class WebTrafficBotConfig: logger.error(f"配置文件格式错误: {e}") raise + def get_current_ip(self): + """获取当前IP地址""" + ip_services = [ + 'https://httpbin.org/ip', + 'https://api.ipify.org?format=json', + 'https://ipinfo.io/json', + 'https://ifconfig.me/ip' + ] + + for service in ip_services: + try: + logger.info(f"正在获取IP地址: {service}") + response = self.session.get(service, timeout=10) + + if response.status_code == 200: + if 'json' in service or 'httpbin' in service or 'ipinfo' in service: + try: + data = response.json() + if 'origin' in data: # httpbin.org + ip = data['origin'] + elif 'ip' in data: # ipify.org 或 ipinfo.io + ip = data['ip'] + else: + ip = str(data) + except: + ip = response.text.strip() + else: + ip = response.text.strip() + + logger.info(f"✅ 当前IP地址: {ip}") + + # 如果配置了代理,显示代理信息 + proxy_config = self.config.get('proxy') + if proxy_config: + logger.info(f"🌐 代理服务器: {proxy_config['host']}:{proxy_config['port']}") + else: + logger.info("🌐 未使用代理,使用本地IP") + + return ip + + except Exception as e: + logger.warning(f"从 {service} 获取IP失败: {e}") + continue + + logger.error("❌ 无法获取当前IP地址") + return None + def setup_session(self): """设置请求会话""" self.session = requests.Session() @@ -87,6 +134,11 @@ class WebTrafficBotConfig: 'Connection': 'keep-alive', 'Upgrade-Insecure-Requests': '1', }) + + # 获取并显示当前IP + current_ip = self.get_current_ip() + if current_ip: + print(f"🌍 当前IP地址: {current_ip}") def setup_selenium_driver(self): """设置Selenium WebDriver""" diff --git a/website_traffic_bot_protocol.py b/website_traffic_bot_protocol.py index 3a0767e..4bcc0d3 100644 --- a/website_traffic_bot_protocol.py +++ b/website_traffic_bot_protocol.py @@ -62,6 +62,53 @@ class WebTrafficBotProtocol: logger.error(f"配置文件格式错误: {e}") raise + def get_current_ip(self): + """获取当前IP地址""" + ip_services = [ + 'https://httpbin.org/ip', + 'https://api.ipify.org?format=json', + 'https://ipinfo.io/json', + 'https://ifconfig.me/ip' + ] + + for service in ip_services: + try: + logger.info(f"正在获取IP地址: {service}") + response = self.session.get(service, timeout=10) + + if response.status_code == 200: + if 'json' in service or 'httpbin' in service or 'ipinfo' in service: + try: + data = response.json() + if 'origin' in data: # httpbin.org + ip = data['origin'] + elif 'ip' in data: # ipify.org 或 ipinfo.io + ip = data['ip'] + else: + ip = str(data) + except: + ip = response.text.strip() + else: + ip = response.text.strip() + + logger.info(f"✅ 当前IP地址: {ip}") + + # 如果配置了代理,显示代理信息 + proxy_config = self.config.get('proxy') + if proxy_config: + logger.info(f"🌐 代理服务器: {proxy_config['host']}:{proxy_config['port']}") + else: + logger.info("🌐 未使用代理,使用本地IP") + + return ip + + except Exception as e: + logger.warning(f"从 {service} 获取IP失败: {e}") + continue + + logger.error("❌ 无法获取当前IP地址") + return None + def setup_session(self): """设置请求会话""" self.session = requests.Session() @@ -93,6 +140,11 @@ class WebTrafficBotProtocol: }) logger.info(f"使用用户代理: {user_agent}") + + # 获取并显示当前IP + current_ip = self.get_current_ip() + if current_ip: + print(f"🌍 当前IP地址: {current_ip}") def simulate_github_visit(self): """模拟从GitHub访问"""