如何找到代理是 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的主要内容,如果未能解决你的问题,请参考以下文章

如何利用ROS软路由搭建SOCKS5服务器

如何将HTTP代理转换成SOCKS5代理

如何用RouterOS封堵HTTP、SOCKS代理

http代理转SOCKS5代理的问题

手机浏览器如何设置socks5代理?

mac 上有啥可以把 socks 代理转换为全局代理的程序吗