如何确定代理是Http还是Socks

11

有人可以告诉我如何确定代理服务器是http还是socks吗?这是否基于端口号?它们有什么区别?

提前感谢。


你为什么想知道? - CodeCaster
我正在使用一款应用程序,它仅支持 HTTP 代理。因此,我想根据类型区分代理。 - user2696179
3个回答

10

如果以http为协议无法成功,尝试使用socks协议:curl -x socks://x.x.x.x:y check-host.net/ip

。请尝试以下命令:curl -x http://x.x.x.x:y check-host.net/ip


检查 x.x.x.x:y 值是什么? - AKS
x.x.x.x 是 IP 地址,y 是你想要检查的端口号。 - Alexander Zhak
@AlexanderZhak 怎样使用id和密码进行curl操作?我一直遇到授权错误... - user1872384
@user1872384 请查看curl文档。它取决于服务使用的认证类型。您可以使用--user username:password键或HTTP头部,或作为URI参数传递用户名和密码。这取决于具体情况。 - Alexander Zhak
谢谢 Alexander Zhak - user1872384

2

不,代理类型并非基于端口号。端口由网络管理员分配,可以是任何他们想要的数字。

你唯一的希望就是如果你的网络配置了某种类型的代理自动配置,以便在需要时向客户端提供特定的代理详细信息。

否则,没有办法查询代理本身。您必须事先知道代理的类型,以便正确地与其通信。


-1

尝试这个脚本:

$ 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。 - huagang

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接