从C#捕获Linux命令的输出(网络流量),而无需将其写入文件

时间:2018-09-29 01:05:48

标签: c# mono

在我的Ubuntu计算机上,我有兴趣捕获端口20001上的流量。为了捕获该端口上的流量,我这样做:

  1. 安装tcpdump apt-get install tcpdump

  2. 运行:tcpdump -i eth0 port 20001(我的网络接口的名称为eth0)

  3. 这将输出:
  

00:49:36.157448 IP debian.20001> 192.168.1.3.5868:UDP,长度652

     

00:49:36.159375 IP 192.168.1.3.5868> debian.20001:UDP,长度681

     

00:53:58.614081 IP 192.168.1.3.5868> debian.20001:UDP,长度674

     

00:53:58.621773 IP debian.20001> 192.168.1.3.5868:UDP,长度626

...等等


现在,我想从c#(单声道)中捕获相同的数据,这就是我尝试过的:

class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine("started!");

        var proc = new Process
        {
            StartInfo = new ProcessStartInfo
            {
                FileName = "tcpdump",
                Arguments = "-i eth0 port 20001", // note eth0 is the name of my network interface
                UseShellExecute = false,
                RedirectStandardOutput = true,
                CreateNoWindow = true
            }
        };

        proc.Start();
        while (!proc.StandardOutput.EndOfStream)
        {
            string line = proc.StandardOutput.ReadLine();
            Console.WriteLine(line);
        }
    }
}

当我运行该程序时,没有捕获任何东西。 如何从Mono c#应用程序中捕获tcpdump -i eth0 port 20001的结果?我知道我可以将其写入文件,但是文件会变得很大,所以我想避免这样做。还是将其写入文件并继续删除文件?

0 个答案:

没有答案