IRC DCC接收文件

时间:2016-01-22 16:20:23

标签: vb.net irc

我的前提是我已经阅读过IRC RFC。 我唯一知道的事情是:当用户向我发送文件时,我会收到这样的CTCP:DCC SEND<文件名> < ipaddress> <端口> < filesize> 其中IPAddress必须从长格式转换为标准IP格式。

转换后如何开始接收文件? 我在这里停了下来:

Dim sendMatch As Match = Regex.Match(b_data, "DCC SEND (.*?) (\d+) (\d+) (\d+?).?$")
   If (sendMatch.Captures.Count > 0) Then
       Dim send_filename As String = sendMatch.Groups.Item(1).Value
       Dim send_fromip As String = IPConvert(sendMatch.Groups.Item(2).Value)
       Dim send_fromport As String = sendMatch.Groups.Item(3).Value
       Dim send_filesize As String = sendMatch.Groups.Item(4).Value
       ...

抱歉我的英文不好,并提前致谢!

1 个答案:

答案 0 :(得分:0)

CTCP DCC命令的参数包括建议的文件名,IP地址(仅限ipv4,编码为ASCII格式的32位整数,例如2130706433,表示127.0.0.1。下一个字段包含端口号和final字段包含文件大小。

只需通过TCP连接连接到给定端口上的给定IP,并以4k块连续接收。收到每个块后,发送一个4字节计数,表示您到目前为止在网络字节顺序中收到的总字节数。继续此操作,直到连接关闭和/或您收到了与文件大小相同的字节数。通常必须在连接关闭之前发送最终块的字节数。

通常,发送客户端可以在发送完成时关闭连接,但不要依赖它们来执行此操作。

此外,永远不要仅仅使用给定的文件名作为面值,让用户能够选择自己的文件并清理它,过滤掉恶意文件类型,否则你可能会在DCC SEND的接收端获取文件,例如名称为“.. \ .. \ .. \ .. \ .. \ windows \ notepad.exe”或如果用户具有正确的权限,如果直接采用将覆盖系统文件。

您可以找到more information here

希望这有帮助!