【发布时间】:2020-10-08 10:01:18
【问题描述】:
我正在使用 TCP 套接字在 C# 中构建一个端口转发。它不必担心正在使用的应用程序协议。
但是,根据应用协议,数据包大小可能会影响协议...例如,使用 FTP 进行身份验证时,在通过端口转发发送 USER 和 PASSWORD 时,尾随字节 (00) 可能会导致错误。所以...我决定通过删除最后一个 00 序列来删除尾随字节...
但是,ssh 协议开始变得混乱......通过删除尾随字节,我最终得到了格式错误的数据包......
我认为的解决方案是在数据第一次到达端口转发时获取数据的实际大小,然后将数据包的确切大小转发到端点。
我的问题是当数据到达套接字时如何获取数据的实际大小,例如:当我使用 socket.Receive 获取发送到端口转发工具的字节时(通过简单的 ssh blabla@someIP),如何我知道实际数据的最后一个字节是什么吗?最后一个数据包的字节数总是小于实际缓冲区大小,但我不知道如何将额外分配空间与 00 形式的实际数据区分开来。
OBS:我正在使用 Socket 类和接收、发送函数。
【问题讨论】:
标签: c# sockets tcp portforwarding