将端口映射到PID以进行瞬态Windows TCP连接

时间:2011-07-26 01:44:32

标签: windows networking network-programming windows-networking

我正在尝试对第三方TCP客户端/服务器Windows XP,SP 3应用程序进行逆向工程,我没有可用的源代码。我的主要攻击线是使用WireShark来捕获TCP流量。

当我在客户端发出某个GUI命令时,客户端会创建与服务器的TCP连接,发送一些数据,并断开连接。服务器端口为1234,客户端端口由操作系统分配,因此会有所不同。

WireShark显示对应于我发出的GUI命令的消息被发送两次。这两条消息带有不同的源端口,但它们具有相同的目标端口(1234,如前所述)。

客户端实际上由几个进程组成,我想确定哪些进程正在发送这些消息。这些过程是长期存在的,因此它们的PID是稳定且已知的。但是,所涉及的TCP连接是瞬态的,只持续几毫秒左右。虽然我已经在WireShark中捕获了客户端端口号,虽然我知道所有涉及的PID,但是连接是瞬态的这一事实使得很难确定哪个PID打开了端口。 (如果连接是长期的,我可以使用netstat将端口号映射到PID。)有没有人建议如何确定哪些进程正在创建这些瞬态连接?

2 个答案:

答案 0 :(得分:1)

我可以想到两件事:

  1. 尝试使用sysinternals的tcpview程序。它给出了系统中所有进程打开的所有tcp连接的详细列表。如果进程创建了连接,您将能够在tcpview中看到它们闪存(连接和断开连接都闪烁),您将知道要开始研究哪些进程。

  2. 尝试在调试器下运行二进制文件。 Windbg支持多进程调试(我认为visual studio也是如此)。您可能只有导出符号可以使用,但这仍然适用于对系统dll的调用。尝试打破任何可疑的Windows API,您知道这些API将由进程调用以创建连接。 MSDN应该包含大多数系统API的相关dll。

  3. 从这里开始......如果再次卡住,请发布后续行动。

答案 1 :(得分:0)

我最终创建了一个批处理文件,该文件在紧密循环中运行netstat并将其输出附加到文本文件。我在运行系统时运行了这个批处理文件,通过梳理所有netstat转储,我能够找到包含与端口关联的PID的转储。