Подтвердить что ты не робот

Как подсчитывать байты, отправленные и полученные по TCP-соединению (в рамках всей системы)?

например. последние версии TCPView имеют такую ​​функциональность: отображение байтов, отправленных/полученных по TCP-соединению (подсчет начинается при запуске TCPView). возможно ли без пакетного сбрасывания? Windows предоставляет какой-либо API для этого? Я не нашел такого счетчика производительности

как перечислять все соединения описаны здесь

EDIT: помогает ли TDI получать статистику передачи по каждому сокету? NetBIOS? любые ссылки, где нужно копать?

4b9b3361

Ответ 1

Я хочу также реализовать эту функцию, поэтому я отменяю tcpview 3.0.2.

Я нашел, tcpview использует счетчик производительности WMI MSNT_TcpIpInformation.

Но MSNT_TcpIpInformation официально не поддерживается в xp и 2003.

вот описание, на которое вы можете ссылаться. http://www.scriptinternals.com/new/us/support/Internal/WMI_MSNT_TcpIpInformation.htm

Кстати, у MSNT_TcpIpInformation нет информации о пакетах, поэтому tcpview просто увеличивает количество отправленных и revd-пакетов каждый раз. вот разбор:

CPU Disasm
Address   Hex dump          Command                                           Comments
0040B41B  |.  83E8 02       SUB EAX,2                                         ; Switch (cases 2..3, 3 exits)
0040B41E  |.  74 29         JE SHORT 0040B449
0040B420  |.  83E8 01       SUB EAX,1
0040B423  |.  75 40         JNE SHORT 0040B465
0040B425  |.  8B57 1C       MOV EDX,DWORD PTR DS:[EDI+1C]                     ; Case 3 of switch Tcpview.40B41B
0040B428  |.  0196 90060000 ADD DWORD PTR DS:[ESI+690],EDX
0040B42E  |.  119E 94060000 ADC DWORD PTR DS:[ESI+694],EBX
0040B434  |.  8386 C0060000 ADD DWORD PTR DS:[ESI+6C0],1
0040B43B  |.  119E C4060000 ADC DWORD PTR DS:[ESI+6C4],EBX
0040B441  |.  5E            POP ESI
0040B442  |.  5F            POP EDI
0040B443  |.  5D            POP EBP
0040B444  |.  5B            POP EBX
0040B445  |.  83C4 3C       ADD ESP,3C
0040B448  |.  C3            RETN
0040B449  |>  8B47 1C       MOV EAX,DWORD PTR DS:[EDI+1C]                     ; Case 2 of switch Tcpview.40B41B
0040B44C  |.  0186 78060000 ADD DWORD PTR DS:[ESI+678],EAX
0040B452  |.  119E 7C060000 ADC DWORD PTR DS:[ESI+67C],EBX
0040B458  |.  8386 A8060000 ADD DWORD PTR DS:[ESI+6A8],1
0040B45F  |.  119E AC060000 ADC DWORD PTR DS:[ESI+6AC],EBX
0040B465  |>  5E            POP ESI                                           ; Default case of switch Tcpview.40B41B
0040B466  |.  5F            POP EDI

Ответ 2

все, у меня есть полностью полностью обратный tcpview 3.0.2 и реализую ту же функцию, что и ее, в соответствии с тем, что я узнал.

tcpview использовать ETW для мониторинга сетевой активности.

Ключевыми API являются StartTrace, OpenTrace, ProcessTrace.

Используйте KERNEL_LOGGER_NAME и включите флаги EVENT_TRACE_FLAG_NETWORK_TCPIP.

Затем вы можете получить данные сетевой активности из EventCallback, затем проанализировать его как TcpIp_TypeGroup1 и других структур. Согласно документу, эти структуры поддерживаются только с точки зрения перспективы. Однако вы можете вызывать и использовать его в xp (угадывание с реверса) и 2003 (моя среда - 2003, без теста на xp). Конечно, вы должны сами определить все эти структуры.

Из перспективы, win предоставляет некоторые API для получения статистики статистики соединений. Например, GetPerTcpConnectionEStats, GetPerUdpConnectionEStats, вы можете получить более подробную информацию из MSDN.

Кроме того, с Vista вы можете использовать RAW Socket для завершения той же работы (точнее, я думаю). Перед перспективой RAW Socket не может получить SEND-пакеты, это жаль.

Ответ 3

Проверьте проект WinSock LSP Sample на http://connect.microsoft.com/WNDP/Downloads

Вы найдете образец в nonifslsp\sockinfo.cpp, который "иллюстрирует, как разработать многоуровневый поставщик услуг, способный подсчитывать все байты, передаваемые через сокет TCP/IP".

Ответ 4

Эта версия netstat (netstatp) sysinternals делает это. IIRC, он использует SNMP для сбора информации. Найдите в сети и найдите подходящую версию. Имена файлов: netstatp.c и netstatp.h. Sysinternals больше не публикует netstatp, о котором я знаю.

Вы также можете пойти здесь и получить tcpview и/или tcpconv, один из которых доступен в исходной форме.

Ответ 5

Посмотрите исходный код BitMeterOS, он работает на xp+. вы также хотите посмотреть TCPDump/Libpcap. оба из этих трафик сетевой сети мониторинга, libpcap, вероятно, будет тем, что вы после, хотя

есть также Winpcap, более ориентированная на окна "версия", можно найти простой учебник по статистике сетевого трафика здесь, вас также будет интересовать this для фильтрации на основе соединения и this для размера сырых пакетов.

Ответ 6

Лучше всего было бы подключить вызовы API "send" и записывать количество отправленных каждый раз. Хотя это действительно не похоже на это, я уверен, что это сработает. Удачи!