确定哪个进程正在与 Windows Server 上的远程端口通信

确定哪个进程正在与 Windows Server 上的远程端口通信

我从工作地点的承包商那里接手了一款产品。该工具收集元信息。信息的确切性质对这个问题并不重要,但它以平面文件和/或数据库的形式存在。不知何故,承包商配置了某物在服务器上将日志(以文本形式)转发到我们的 Splunk 转发器。我们不思考他正在使用 Splunk Forwarder,因为我们没有看到它存在的证据(无论是安装在驱动器的任何地方,还是作为服务运行)。

我们知道转发到哪个远程端口,我们查看从 Windows 服务器(安装有应用程序)到远程端口的流量。

连接发生的时间似乎是随机的,而且持续时间很短。我试图捕捉什么过程就是建立这种联系,在哪里它位于 Windows 服务器上。

为此,我编写了以下脚本,但如果有更好的方法,我绝不会执着于使用 Powershell:

$foundConnections = @()
$foundProcesses = @()

while($true)
{
    Start-Sleep -Milliseconds 100
    $connections = Get-NetTCPConnection -RemotePort 30117 -ErrorAction Ignore
    if($connections -ne $null)
    {
        if($connections.Count -ne $null -and $connections.Count -gt 1)
        {
            foreach($aConnection in $connections)
            {
                $foundConnections += $aConnection
                $process = Get-Process -Id $aConnection.OwningProcess
                Write-Output ($process)
                $foundProcesses += $process
                Add-Content -Path C:\Temp\procs.csv -Value ((Get-Date).ToString() + "," + $process.Name + "," + $process)
            }

        }
        else
        {
            $foundConnections += $connections
            $process = Get-Process -Id $connections.OwningProcess
            Write-Output ($process)
            $foundProcesses += $process
            Add-Content -Path C:\Temp\procs.csv -Value ((Get-Date).ToString() + "," + $process.Name + "," + $process)
        }

    }
}

...最终确实发现了流量,但生成的 csv 看起来像这样:

... 2017 年 11 月 8 日上午 8:25:06,,

2017 年 11 月 8 日上午 8:25:06,,

2017 年 11 月 8 日上午 8:25:07,,

2017 年 11 月 8 日上午 8:25:07,,

2017 年 11 月 8 日上午 8:25:07,,

2017 年 11 月 8 日上午 8:25:07,,

2017 年 11 月 8 日上午 8:25:14,空闲,系统.诊断.进程(空闲)2017 年 11 月 8 日上午 8:25:14,空闲,系统.诊断.进程(空闲)2017 年 11 月 8 日上午 8:25:15,空闲,系统.诊断.进程(空闲)2017 年 11 月 8 日上午 8:25:15,空闲,系统.诊断.进程(空闲)2017 年 11 月 8 日上午 8:25:15,空闲,系统.诊断.进程(空闲)2017 年 11 月 8 日上午 8:25:15,空闲,系统.诊断.进程(空闲)2017 年 11 月 8 日上午 8:25:15,空闲,系统.诊断.进程(空闲)2017 年 11 月 8 日上午 8:25:15,空闲,System.Diagnostics.Process(空闲)2017 年 11 月 8 日上午 8:25:15,空闲,System.Diagnostics.Process(空闲)2017 年 11 月 8 日上午 8:25:16,空闲,System.Diagnostics.Process(空闲)2017 年 11 月 8 日上午 8:25:16,空闲,System.Diagnostics.Process(空闲)2017 年 11 月 8 日上午 8:25:16,空闲,System.Diagnostics.Process(空闲)2017 年 11 月 8 日上午 8:25:16,空闲,System.Diagnostics.Process(空闲)2017 年 11 月 8 日上午 8:25:16上午,空闲,系统.诊断.进程(空闲) 2017 年 11 月 8 日上午 8:25:16,空闲,系统.诊断.进程(空闲)

...

...几百行这样的。

如果我知道某个进程正在使用的远程端口,并且该进程的运行似乎没有遵循计划,而且连接时间很短,那么如何确定该进程正在运行?

答案1

您可能想尝试使用数据包捕获工具,例如 Netmon(又名网络监视器)。使用捕获过滤器,使其保持较小,根据目标端口和 IP 进行过滤,让它运行几个小时,您应该会看到该过程。然后只需在磁盘上搜索该 exe。Netmon DLhttps://www.microsoft.com/en-us/download/details.aspx?id=4865 Netmon 已被较新的“消息分析器”取代,我很少使用它,有些人也喜欢 Wireshark,但我不确定 Wireshark 是否能像 MS 捕获工具一样深入到进程级别。

如果它们是通过计划任务转发的……任务调度程序的树形视图对于搜索来说可能很乏味。但是还有一个用于带有 powershell 的任务的 CLI,Get-ScheduledTask它返回所有作业名称和任务路径。也许值得一看。

相关内容