SOCKS5 如何推断 SSH 动态转发中的目标端口?

How SOCKS5 infers the destination port within SSH dynamic forwarding?

使用本地转发时,我们可以自由选择目标端口:

ssh -L 8000:10.10.1.11:80 user@192.168.56.102 - 80 是目标端口 - 我们明确指定要转发到哪个端口

看看diagram in this article。如果我理解正确的话,在动态转发中目标端口有点隐含(?):

ssh -D 8080 user@192.168.56.102 - 8080 是本地主机端口,但它仍然以某种方式为我们转发到 80

问题:

谢谢。

PS。在这里 https://unix.stackexchange.com/questions/213213/difference-between-local-port-forwarding-and-dynamic-port-forwarding#comment401063_213219 我发现了一些我感兴趣的提示,遗憾的是没有提供详细信息...

SSH和SOCKS是两种完全不同且互不相关的协议。但是,回答你的问题:

How SOCKS5 proxy knows which port to forward traffic to?

SOCKS 客户端明确告诉它连接到哪里。目标 host/ip 和端口是 SOCKS CONNECT 命令中的输入字段。所以,根本就没有guessing/infering。

Does SOCKS5 proxy somehow sniff destination from the protocol of the traffic it proxies?

没有。 SOCKS 只是原始字节的隧道,它没有自己以外的协议概念。

Can that destination port be configured?

不在代理本身上,不。由于客户端决定连接位置,因此任何配置都将在客户端进行。

Is it a predefined fixed set of protocols/ports? Smth like http=80 destination port?

没有

Any other internal details of forwarding you can add to clarify the picture.

阅读 SOCKS 协议规范。

SOCKS v4:https://www.openssh.com/txt/socks4.protocol

SOCKS v4a:https://www.openssh.com/txt/socks4a.protocol

SOCKS v5:https://datatracker.ietf.org/doc/html/rfc1928