【问题标题】:get IP addresses a program wants to connect to获取程序要连接的 IP 地址
【发布时间】:2020-05-10 17:56:21
【问题描述】:

我的目标是我的代码 (C#) 输出另一个程序尝试连接的 IP 地址。 示例:我的 browser.exe 想要连接到位于 12.34.567.89 的网站,因此我的代码将输出该 IP。

注意:我的主要麻烦是还要列出不成功的连接尝试,因为我发现的其他所有内容似乎都只适用于已建立的连接。

我没有太多经验,这是我的第一篇文章,所以任何事情都可以提供帮助。 在此先感谢

【问题讨论】:

  • 您是否有理由不只是为此使用 WireShark 之类的程序?
  • 我想稍后在该代码上构建,而不是手动监控它。
  • @Christopher wireshark 不会给你这个过程。 Sysinternals 的 TCPView 是查看每个进程的连接的方法。 docs.microsoft.com/en-us/sysinternals/downloads/tcpview
  • @RobertNavado 感谢您的快速响应,TCPView 是否也允许我看到连接尝试,因为我似乎只能看到已建立的连接?编辑:有点像 NetLimiter(或类似的)在允许应用建立连接之前所做的事情。
  • 尝试查看docs.microsoft.com/en-us/windows-server/administration/… 以及状态为 SYN_SEND 和 SYN_RECEIVED 的连接。您可能也对 CLOSED 连接感兴趣。请注意,不同的连接状态可能有不同的超时时间,正确关闭的连接会比失败更快地消失。这一切都取决于目标系统的实际配置

标签: c# network-programming monitoring netstat


【解决方案1】:

我认为原始套接字非常适合这些用途。

new Socket(AddressFamily.InterNetwork, SocketType.Raw, ProtocolType.IP);

尝试查看that 原始套接字示例(您需要将 _fcaptureIp 替换为您的 ip)

【讨论】:

  • 我的例子对你有帮助吗?有什么问题吗?
  • 很多问题是的!但我得花点时间看看一切。非常感谢你所做的一切。
  • 我很乐意为您提供帮助
【解决方案2】:

这个答案不是纯 C#,而是指向用 C# 编写的示例调用的链接。

一般而言,在 MS Windows 平台上,问题中的许多任务都可以使用WMIWQL 语言执行。

要达到要求,可以查询MSFT_NetTCPConnection 类并使用属性OwningProcessRemoteAddress

select OwningProcess, RemoteAddress from MSFT_NetTCPConnection

您可以使用ManagementObjectSearcher 对 WMI 执行查询。查看示例herehere

如果需要获取流程详细信息 - 另一个查询可以提供帮助

select * from Win32_Process where ProcessID = PID_FROM_NET_TCP_CONNECTION

不幸的是,无法在 WQL 中连接表,但可以创建和注册自己的 WMI 类,并结合类似于连接行为的所需值。例如here。或者只是在你的代码中处理它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-05-26
    • 2010-12-13
    • 2014-10-16
    • 2010-12-26
    • 1970-01-01
    • 2011-09-25
    相关资源
    最近更新 更多