如何找到代理是 Http 或 Socks
Posted
技术标签:
【中文标题】如何找到代理是 Http 或 Socks【英文标题】:How To Find Proxy is Http or Socks 【发布时间】:2013-08-19 11:18:51 【问题描述】:谁能告诉我如何找到代理服务器是 http 或 socks ?那是基于端口号吗?有什么不同?
提前致谢
【问题讨论】:
你为什么想知道? 我正在使用一个只支持 http 代理的应用程序。所以我想根据类型来区分代理 【参考方案1】:试试 http:curl -x http://x.x.x.x:y check-host.net/ip
。如果失败,试试袜子:curl -x socks://x.x.x.x:y check-host.net/ip
.
【讨论】:
要检查的 x.x.x.x:y 值是什么? x.x.x.x 是 IP,y 是您要检查的端口号 @AlexanderZhak 如何使用 ID 和密码进行 curl?我遇到授权错误... @user1872384 请查看 curl 文档。这取决于服务使用的身份验证类型。您可以使用--user username:password
键或在 HTTP 标头中或作为 URI 参数传递用户名和密码。这取决于。
谢谢亚历山大·扎克【参考方案2】:
不,代理类型不基于端口号。端口由网络管理员分配,可以是他们想要的任何东西。
您唯一的希望是您的网络是否配置为使用某种类型的 proxy auto-config 在需要时向客户端提供特定代理详细信息。
否则,无法查询代理本身。你必须提前知道它是什么类型的代理,这样你才能知道如何正确地与它通信。
【讨论】:
【参考方案3】:试试这个脚本:
$ cat get_version.py
#!/usr/bin/python
import struct
import socket
import sys
try:
server = sys.argv[1]
port = sys.argv[2]
except:
print "Usage: server port"
try:
sen = struct.pack('BBB', 0x05, 0x01, 0x00)
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(( server , int( port ) ))
s.sendall(sen)
data = s.recv(2)
s.close()
version, auth = struct.unpack('BB', data)
print 'server : port is ', server, ':', port, '; varsion: ', version
except Exception as e:
print e
【讨论】:
goproxy 之类的工具可以在一个端口上支持多个 socks5 / HTTP/HTTPS 协议,并且使用您的代码似乎只能检测到 socks5。以上是关于如何找到代理是 Http 或 Socks的主要内容,如果未能解决你的问题,请参考以下文章