Отслеживание загрузки файлов в интернет - PullRequest
0 голосов
/ 12 апреля 2019

Основной вопрос: может ли приложение c # отслеживать момент, когда пользователь начинает загружать файл со своего локального компьютера в Интернет?Это может быть любой процесс на машине.Приложение отслеживания не запускает процесс загрузки файла.

Существует пример кода, который захватывает так много исходящего трафика TCP и UDP.Но мне нужно фильтровать только пакеты, содержащие данные для передачи файлов.

public static void Start()
{
    //get ip address
    IPAddress[] addrList = Dns.GetHostByName(Dns.GetHostName()).AddressList;
    string IP = addrList[0].ToString();


    //var devices = SharpPcap.WinPcap.WinPcapDeviceList.Instance;
    var devices = CaptureDeviceList.Instance;

    // differentiate based upon types

    int count = devices.Count;
    if (count < 1)
    {
        Console.WriteLine("No device found on this machine");
        return;
    }

    for (int i = 0; i < count; ++i)
    {               
           // CaptureFlowReceive(IP,  i);
            CaptureFlowSend(IP,i);                
    }
    while (true)
    {               
        //Call refresh function every 1s 
        RefershInfo();
    }

}

private static void CaptureFlowSend(string IP, int deviceID)
{
    ICaptureDevice device = CaptureDeviceList.New()[deviceID];

    device.OnPacketArrival += new PacketArrivalEventHandler(device_OnPacketArrivalSend);
    int readTimeoutMilliseconds = 1000;
    device.Open(DeviceMode.Promiscuous, readTimeoutMilliseconds);
    string filter = "src host " + IP + " and ip ";
    device.Filter = filter;
    device.StartCapture();

}

private static void device_OnPacketArrivalSend(object sender, CaptureEventArgs e)
{      

    var rawCapture = e.Packet;
    var packet = Packet.ParsePacket(rawCapture.LinkLayerType, rawCapture.Data);

    var data = packet.PayloadPacket.PayloadPacket.PayloadData;

}

public static void RefershInfo()
{           
    Thread.Sleep(1000);

}

1 Ответ

0 голосов
/ 12 апреля 2019

Кажется, я нашел решение.С помощью команды netstat -a -n -o мы можем получить все процессы, использующие сокеты tcp и udp.Также мы можем получить информацию о DiskUsage по процессам из списка процессов, полученного на предыдущем шаге.Конечно, это не идеальное решение, но это почти то, что мне нужно.

...