2013-03-10 2 views
1

현재 SharpPcap을 사용하여 패킷을 캡처하고 PacketDotNet을 사용하여 패킷에 대한 정보를 얻는 wireshack과 유사한 기능을 가진 C# 프로그램을 작성하고 있습니다. 나는 패킷과 관련된 프로세스의 이름을 어떻게 얻을 수 있는지 알고 싶습니까?SharpPcap get Process Name

+0

문제를 설명하는 데 도움이되는 몇 가지 예제 코드를 기입하십시오! – PearsonArtPhoto

답변

2

당신은 netstat -o의 출력을 구문 분석 ProcessId를 얻을 다음 Process.GetById에서 프로세스 이름를 얻을 수 있습니다.
이 코드가 도움이 될 수 있지만, 난 regexps '에 함께 매우 강한 아니에요 :)

var proc = new Process { 
    StartInfo = new ProcessStartInfo { 
     FileName = "netstat", 
     Arguments = "-on", 
     UseShellExecute = false, 
     RedirectStandardOutput = true, 
     CreateNoWindow = true 
    } 
    }; 

    proc.Start(); 
    Regex r = new Regex(@"\S+\s+(?<address>\S+)\s+\S+\s+\S+\s+(?<pid>\d+)"); 
    while (!proc.StandardOutput.EndOfStream) { 
    var res = r.Match(proc.StandardOutput.ReadLine()); 
    if (res.Success) { 
     var pid = int.Parse(res.Groups["pid"].Value); 
     var address = res.Groups["address"].Value; 
     Console.WriteLine("{0} - {1}", address, Process.GetProcessById(pid).ProcessName); 
    } 
    } 
+0

이것이 유일한 옵션입니까? 어떤 브라우저가 포트 80을 사용 하는지를 결정할 때 이것이 잘 작동한다고 생각하지 않습니다. – Nuzzolilo

+0

확실히 말할 수는 없지만 그래픽 인터페이스와 명령 줄 도구 인 [TcpView] (http://technet.microsoft.com/en-US/sysinternals/bb897437.aspx)를 사용할 수도 있다고 생각합니다. netstat과 매우 유사합니다. – user20140268

관련 문제