【问题标题】:Get my own hostname in .net FTP Server implementation在 .net FTP 服务器实现中获取我自己的主机名
【发布时间】:2017-03-17 02:28:03
【问题描述】:

我正在开发一个用于恶意软件分析的应用程序。它跟踪病毒的所有 ftp 请求。所以我正在实现我自己的 ftp 服务器,我在自己的 pc 中有一个 dns 服务器,将所有主机重定向到 127.0.0.1。 问题是我想知道 ftp 请求的主机名。它可以是任何地址,因为 dns 服务器返回 127.0.0.1。 我正在使用.net 和 TcpClient。 我解析了本地和远程 ip (127.0.0.1),但我不知道如何获取恶意软件访问的主机名。 在 http 协议中,主机名在标头中传输,但我不知道如何在 ftp 协议中获取它

【问题讨论】:

  • 不完全是您想要的,但也许会有所帮助? stackoverflow.com/questions/716748/reverse-ip-domain-check
  • 明确一点...您有自己的 FTP 服务器,并且想在 .net 中捕获请求的调用方主机名?您的 FTP 服务器在 IIS 中吗?
  • @HBomb 我制作了自己的 ftp 服务器,也制作了自己的 DNS 服务器,所以我可以控制一切,问题是在 dns 服务器中,我不知道哪个协议正在请求名称( ftp o http 等)和在 ftp 服务器中我不知道请求的主机
  • 您具体的 DNS 服务器实现是什么?您必须在重新路由发生之前拦截原始主机名,因为之后它会丢失。我相信它在重新路由时也会从以太网框架中删除。

标签: .net ftp dns tcpclient malware-detection


【解决方案1】:

FTP 不包含此信息,它所基于的 TCP 也不包含此信息。 HTTP 在数据包的标头部分特别包含我们在 Web 开发中习惯使用的这些信息和其他信息。您必须在 DNS 解析时或之前收集此信息。

见:https://stackoverflow.com/a/12706928


另外,你需要 TcpListener 而不是 TcpClient 来监听 FTP 请求。

【讨论】:

  • 我可以知道在 dns 服务器中哪个协议正在请求一个 IP,所以我可以捕获主机名吗?
  • 在 DNS 解析期间域外的信息不会被传递,这是一个跟踪示例 - serverfault.com/a/173193
  • 我建议看看 FiddlerCore。我只使用过 Fiddler 来拦截 HTTP,但我知道它也可以配置为 FTP 拦截。 FiddlerCore 是其作为 .NET 库的功能。它作为代理运行,通过 WinINET 拦截所有流量。 fiddler.wikidot.com/misc-information-page#toc1
【解决方案2】:

虽然 vee_ess 是正确的,FTP 和 TCP 都不包含此信息,但如果连接是通过 Internet 进行的,那么从技术上讲,该连接是 TCP/IP...并且 IP 协议确实在以太网帧中包含此信息。

您需要做的是从原始以太网帧中读取此信息(正如 vee_ess 所述,在 DNS 解析之前)。

由于这是在 .Net 中标记的,我假设您想留在 .Net 中。所以我会推荐 pCapDotNet。

http://pcapdotnet.codeplex.com/

这是 winpcap 工具的 .Net 包装器,可让您过滤、拦截和读取链路层数据包。请参阅此处的文档:

https://www.winpcap.org/docs/docs_412/html/main.html

它在网络设备层运行。这意味着它将基本上在网络适配器处拦截数据包,这应该在您的 DNS 服务器读取和重写数据包之前。然后,您应该在以太网帧中存储原始发送 IP 和请求的主机名对。您的 DNS 服务器会将解析后的 IP 地址发回给调用者,调用者将直接通过其 IP 联系您的 FTP 服务器。

此时,您可以将发件人的 IP 地址与存储的地址进行比较,您现在就知道请求的原始主机名是什么了。

【讨论】:

  • 我试过这个选项。但问题是计算机处于脱机状态,出于安全原因(恶意软件分析)没有以太网电缆,我不知道为什么包裹不会发送到以太网卡,所以我无法跟踪它们。可能是因为地址是127.0.0.1。
  • 您的 DNS 服务器怎么会没有网络连接?你是说你的 DNS 和 FTP 实现在同一个盒子上?
  • 我的DNS服务器和我的ftp服务器都在同一台计算机上,所以当病毒试图通过它的主机名访问任何ftp地址时,dns服务器响应为127.0.0.1,病毒访问到本地 ftp 服务器
  • 你不能拦截这个数据包,因为它永远不会离开你的网卡。我的建议是有 3 个盒子。 1是病毒源,第二是DNS,第三是你的ftp。然后你通过以太网将它们全部连接起来(但不要连接其他任何东西,以控制病毒)。然后,您可以截取数据包并按上述方式获取主机名。
猜你喜欢
  • 1970-01-01
  • 2011-01-09
  • 2016-03-24
  • 1970-01-01
  • 2016-08-04
  • 2016-04-16
  • 2019-07-08
  • 1970-01-01
  • 2020-01-08
相关资源
最近更新 更多