我正在开发一个用于恶意软件分析的应用程序。它跟踪病毒的所有ftp请求。所以我正在实现我自己的ftp服务器,我在自己的电脑上有一个dns服务器,将所有主机重定向到127.0.0.1。 问题是我想知道ftp请求的主机名。它可以是任何地址,因为dns服务器返回127.0.0.1。 我正在使用.net和TcpClient。 我解析本地和远程IP(127.0.0.1),但我不知道如何获取恶意软件访问的主机名。 在http协议中,主机名在标题中传播,但我不知道如何在ftp协议中获取它
答案 0 :(得分:0)
FTP不包含此信息,也不包含构建在其上的TCP。 HTTP特别具有此信息以及我们在数据包的标头部分中用于Web开发的其他信息。您必须在DNS解析时或之前收集此信息。
请参阅:https://stackoverflow.com/a/12706928
此外,您需要TcpListener而不是TcpClient来侦听FTP请求。
答案 1 :(得分:0)
虽然vee_ess是正确的,FTP和TCP都不包含这些信息,如果连接是通过互联网发生的,那么连接在技术上是TCP / IP ......并且IP协议确实在以太网帧中包含这些信息。
您需要做的是从原始以太网框架中读取此信息(以及在解析DNS之前提到的vee_ess)。
由于这是在.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地址与存储的内容进行比较,现在您就可以知道所请求的原始主机名是什么。