Python爬虫在winxp上搭建adsl vps拨号器,如何设置IP的端口?跟着squid设置端口不行
本人学习爬虫到需要一定大量 ip 找到一个轮子 https://github.com/z1421012325/AutoProxy
http://i2.tiimg.com/691087/3c0c93d4b01b0717.png
http://i2.tiimg.com/691087/023a91be1a9eb0dd.png
我买了一台 xp 的 adsl 拨号器,搞了个拨号软件每隔 20 秒拨一次号,再用 python 不断循环发送给第二台含有 flask 的固定服务器,发现只有 host 发过来了,port 端口没有,有仔细阅读说端口需要额外设置
http://i2.tiimg.com/691087/afb8ea950f4f907d.png
--------------------------------------------------------------------------------
“注意默认是 8888,你需要用 Squid 或者 TinyProxy 配置下代理,端口是 8888,这里端口 8888 即默认的拨号 VPS 的代理端口,这里配置下保证输出结果自动拼接端口。”
--------------------------------------------------------------------------------
xp 上貌似只能用 squid2.6 版本的,也在网上找了一些教程跟着设置端口 8888 或者 3126 https://www.cnblogs.com/zhaowenzheng/archive/2008/08/06/1262252.html ,但是还是不行,我使用第三台发送 vps 拨号拨出来的 host:8888 或者 3126 端口 还是不行,显示的是第三台的 ip
http://i2.tiimg.com/691087/51c36beec7d9afc4.png
求救怎么设置端口和有效 ip
Python爬虫在winxp上搭建adsl vps拨号器,如何设置IP的端口?跟着squid设置端口不行
我理解你的问题,你想在Windows XP上用Python写一个ADSL VPS拨号器,并且需要设置IP的端口,但跟着Squid的设置方法行不通。
在Windows XP上,ADSL拨号后获取的是公网IP,但设置端口转发或监听需要直接操作Windows的网络配置。Squid是代理服务器,它的端口设置是应用层的,不适用于直接控制网络接口的端口绑定。
这里的关键是:在Windows XP上,你需要用Python的socket库绑定到ADSL拨号后获取的具体IP地址,而不是0.0.0.0。拨号后,系统会有一个新的网络接口(通常是“宽带连接”),你需要获取这个接口的IP。
下面是一个示例代码,展示如何获取ADSL拨号后的IP并绑定端口:
import socket
import subprocess
import re
import time
def get_adsl_ip():
"""获取ADSL拨号后的IP地址"""
try:
# 执行ipconfig命令获取网络信息
result = subprocess.run(['ipconfig', '/all'], capture_output=True, text=True)
output = result.stdout
# 查找宽带连接的IP(Windows XP中通常显示为"宽带连接"或拨号名称)
# 这里需要根据你的实际连接名称调整
pattern = r'宽带连接.*?IP Address[.\s]*: (\d+\.\d+\.\d+\.\d+)'
match = re.search(pattern, output, re.DOTALL | re.IGNORECASE)
if match:
return match.group(1)
else:
# 如果找不到,尝试其他可能的连接名称
patterns = [
r'PPP适配器.*?IP Address[.\s]*: (\d+\.\d+\.\d+\.\d+)',
r'拨号连接.*?IP Address[.\s]*: (\d+\.\d+\.\d+\.\d+)'
]
for pattern in patterns:
match = re.search(pattern, output, re.DOTALL | re.IGNORECASE)
if match:
return match.group(1)
except Exception as e:
print(f"获取IP失败: {e}")
return None
def create_server_on_adsl_ip(port=8080):
"""在ADSL IP上创建服务器"""
adsl_ip = get_adsl_ip()
if not adsl_ip:
print("未找到ADSL IP地址,请确保已成功拨号")
return
print(f"ADSL IP地址: {adsl_ip}")
try:
# 创建socket服务器
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
# 关键:绑定到ADSL IP,而不是0.0.0.0
server_socket.bind((adsl_ip, port))
server_socket.listen(5)
print(f"服务器已在 {adsl_ip}:{port} 上启动")
while True:
client_socket, client_address = server_socket.accept()
print(f"接收到来自 {client_address} 的连接")
# 处理客户端请求...
client_socket.close()
except Exception as e:
print(f"服务器启动失败: {e}")
def setup_adsl_connection():
"""ADSL拨号函数(示例)"""
# Windows XP拨号命令
# rasdial "宽带连接" username password
try:
# 请替换为你的实际拨号信息
subprocess.run(['rasdial', '宽带连接', 'your_username', 'your_password'])
print("ADSL拨号中...")
time.sleep(5) # 等待拨号完成
except Exception as e:
print(f"拨号失败: {e}")
# 使用示例
if __name__ == "__main__":
# 1. 先进行ADSL拨号
setup_adsl_connection()
# 2. 等待获取IP
time.sleep(3)
# 3. 在获取的IP上启动服务器
create_server_on_adsl_ip(port=8080)
重要说明:
-
IP获取:代码中的
get_adsl_ip()函数通过解析ipconfig输出来获取拨号后的IP。在Windows XP上,拨号连接通常显示为"宽带连接"。 -
绑定特定IP:关键点是
server_socket.bind((adsl_ip, port)),这确保socket只绑定到ADSL接口的IP。 -
拨号命令:
rasdial是Windows XP自带的拨号命令,你需要替换your_username和your_password为实际的ADSL账号密码。 -
防火墙:确保Windows XP防火墙允许该端口的入站连接。
如果Squid的方法不行,很可能是因为Squid监听的是本地回环地址或所有接口,而你需要的是绑定到拨号后的特定公网IP。
总结建议:直接绑定到拨号后获取的具体IP地址,而不是使用Squid的配置方法。
客户端本来就没发送 port,port 是在服务端 config.py 那边设置固定好,ip + ‘:’ + str(config.PORT)
那我在含 flask 服务端上咋知道 vps 客户端的端口啊,
轮子中说的难道是要在 flask 服务端使用 Squid 或者 TinyProxy 设置端口吗?还是随便写一个?
你固定设置一个啊。那是你拨号后得到新 IP,只是 IP 变,端口固定一直那个。(除非你要随机端口)
电信一直拨号? 早点放弃这个做法比较好
不,其实我想问是在 vps 客户端上设置还是在含有 flask 的服务端使用 squid 设置一个端口?
其实就是这点搞不懂
怎么?会把这服务器 ban 掉吗?还是有什么缺点?
我现在再试试 在含 flask 的服务端 用 tinyproxy 按着这个搞 https://www.2cto.com/kf/201806/754303.html
http://zhiweio.me/2017/07/26/dynamic-agent-building/
https://github.com/PyCN/dynamicAgent
好久之前我也有过这样的需求,当时写的文章,你有需要可以参考一下
我这边弄了一个 centos 的 adsl vps 拨号服务器,是要在 vps 端设置端口才行,我先前是在 xp 上使用 squid,现在 centos 使用的是 tinyproxy 设置端口的,xp 上的可能是 squid 设置有问题,所以一直没有弄开端口
看了一下,应该是你的代理服务器设置有问题,可以直接在代理服务器那台机上连一下 8888 端口试试,如果本机测试可以连上的话就看看防火墙设置,还不行的话估计是 NAT 的问题了,可以按常规的 NAT 打洞操作来搞。
对了,squid 有白名单设置的,如果没给调用机的 IP 开白名单的话也是使用不了的,不过可以看到 403 页面
我设置的是 0.0.0.0/0 都可以访问,但是用不了
这个函数的方法 s.connect((“8.8.8.8”, 80)) 什么意思,我还没学这个…看不懂

