Как я могу контролировать сетевой трафик в Windows из командной строки - PullRequest
6 голосов
/ 31 января 2010

Как я могу отслеживать сетевой трафик в Windows из командной строки;в частности, скорость загрузки / выгрузки и объем загружаемых / загружаемых данных?Есть ли сценарий / пакет для этого?

Ответы [ 4 ]

7 голосов
/ 10 февраля 2012

Хотя tshark действительно мощно, если вы хотите иметь детализированную статистику (в соответствии с хостами, протоколами, ...), она имеет основной недостаток для сбора статистики за период времени Бег. Таким образом, полезно только сообщать «мгновенную» статистику, но не сообщать о трафике опроса в регулярные моменты времени, чтобы иметь представление о том, как меняется сетевой трафик в течение дня, недели, ...

Кроме того, поскольку tshark выполняет захват пакетов, возникают некоторые издержки.

Итак, в соответствии с вашими потребностями вас могут заинтересовать команды MS Windows net или netstat (netstat имеет возможность сообщать статистику по протоколу). 'net statistics [Server|workstation]' или 'netstat [-e|-s]', что касается статистики сетевого трафика, являются эквивалентами Linux 'ifconfig' для MS Windows (или 'cat /proc/net/dev', если хотите).

Обратите внимание, что, как и ifconfig do, net или netstat сообщают только объем данных с момента запуска интерфейса.

Чтобы получить скорость трафика, вам нужно пометить время вызовов для этих команд и выполнить вычисления самостоятельно.

AFAIK , обе команды поставляются со всеми последними версиями MS Windows.

4 голосов
/ 21 ноября 2015

typeperf в Windows должен работать для получения данных.

typeperf "\Network Interface(*)\....
typeperf -q "Network Interface" will list all the object
\Network Interface(*)\Bytes Total/sec
\Network Interface(*)\Packets/sec
\Network Interface(*)\Packets Received/sec
\Network Interface(*)\Packets Sent/sec
\Network Interface(*)\Current Bandwidth
\Network Interface(*)\Bytes Received/sec
\Network Interface(*)\Packets Received Unicast/sec
\Network Interface(*)\Packets Received Non-Unicast/sec
\Network Interface(*)\Packets Received Discarded
\Network Interface(*)\Packets Received Errors
\Network Interface(*)\Packets Received Unknown
\Network Interface(*)\Bytes Sent/sec
\Network Interface(*)\Packets Sent Unicast/sec
\Network Interface(*)\Packets Sent Non-Unicast/sec
\Network Interface(*)\Packets Outbound Discarded
\Network Interface(*)\Packets Outbound Errors
\Network Interface(*)\Output Queue Length
\Network Interface(*)\Offloaded Connections
4 голосов
/ 31 января 2010

Вы можете использовать tshark с аргументом -z <statistics>. Просто поиск Wireshark . Это с открытым исходным кодом и мультиплатформенный.

1 голос
/ 17 марта 2018

Я хотел дать вам более простое решение, затем я использовал свой предыдущий ответ, чтобы написать новый пакетный скрипт Windows, который повторяется каждые 10 секунд. Он контролирует загрузку и загрузку пропускной способности / скорости в консоли и регистрирует количество байтов, переданных в файле .csv.

@ECHO off
SETLOCAL ENABLEDELAYEDEXPANSION

set TAB=    
echo Timestamp%TAB%Down bytes%TAB%Up bytes%TAB%Down speed%TAB%Up speed

:: Store console command result
:looptask
SET count=1
FOR /F "tokens=* USEBACKQ" %%F IN (`netstat -e`) DO (
  SET string!count!=%%F
  SET /a count=!count!+1
)
:: Bytes transfered line is string3

:: Get rid of the whitespaces 
:loopreplace
if defined string3 (
  set "new=!string3:  = !"
  if "!new!" neq "!string3!" (
    set "string3=!new!"
    goto :loopreplace
  )
)
if defined string3 if "!string3:~0,1!" equ " " set "string3=!string3:~1!"
if defined string3 if "!string3:~-1!" equ " " set "string3=!string3:~0,-1!"

:: Extracting bytes downloaded and uploaded
set line=%string3:~6%
FOR /F "tokens=1,2 delims= " %%A IN ("%line%") DO (
  set dbytes=%%~A
  set ubytes=%%~B
)

:: Midnight epoch
for /F "usebackq tokens=1,2 delims==" %%i in (`wmic os get LocalDateTime /VALUE 2^>NUL`) do if '.%%i.'=='.LocalDateTime.' set ldt=%%j
set time=%ldt:~8,2%:%ldt:~10,2%:%ldt:~12,2%
FOR /F "tokens=* delims=0" %%A IN ("%ldt:~8,2%") DO SET /A hs=%%A+0
FOR /F "tokens=* delims=0" %%A IN ("%ldt:~10,2%") DO SET /A min=%%A+0
FOR /F "tokens=* delims=0" %%A IN ("%ldt:~12,2%") DO SET /A sec=%%A+0
set /a epoch=%hs%*3600+%min%*60+%sec%

:: Calc speeds
if not defined LOOPCOMPLETE (
    echo %time%%TAB%%dbytes%%TAB%%ubytes%%TAB%0.00 KB/s%TAB%0.00 KB/s
    goto :skip
)
:: Read .CSV file last line values
for /f %%i in ('find /v /c "" ^< bwlog.csv') do set /a lines=%%i
set /a lastLine=%lines% - 1
SET count=1
FOR /F "tokens=* USEBACKQ" %%F IN (`more /e +%lastLine% bwlog.csv`) DO (
  SET string!count!=%%F
  SET /a count=!count!+1
)
FOR /F "tokens=1,2,3 delims=," %%A IN ("%string1%") DO (
  set lasttime=%%~A
  set lastdown=%%~B
  set lastup=%%~C
)
if %epoch% == %lasttime% (  
    goto :skip
)
set /a dspeed=(dbytes-lastdown)/(epoch-lasttime)/10
set ddec=%dspeed:~-2%
set /a dspeed=(dbytes-lastdown)/(epoch-lasttime)/1000
set /a uspeed=(ubytes-lastup)/(epoch-lasttime)/10
set udec=%dspeed:~-2%
set /a uspeed=(ubytes-lastup)/(epoch-lasttime)/1000
echo %time%%TAB%%dbytes%%TAB%%ubytes%%TAB%%dspeed%.%ddec% KB/s%TAB%%uspeed%.%udec% KB/s
:skip

:: Append the .CSV file 
echo %epoch%,%dbytes%,%ubytes% >> "bwlog.csv"

:: Do every 10 seconds
set LOOPCOMPLETE=1
timeout /t 10 /nobreak >nul
goto :looptask

ENDLOCAL

PS: ограничения Windows - счетчик сбрасывает каждые 4 ГБ переданных и в полночь.


Старое решение с использованием планировщика заданий и XAMPP:

Мне пришлось отслеживать и регистрировать загруженных данных как ваш случай, и я обнаружил, что быстрее запустить скрипт с диспетчером задач Windows , чем искать бесплатное программное обеспечение, которое сбросить обычную графическую информацию в файл. Возможно, мой домашний сценарий подойдет вам.

Я запустил локальный сервер Apache / PHP с помощью XAMPP для Windows и запустил этот скрипт из командной строки. Например:

"C:\xampp\php\php.exe -f C:\xampp\htdocs\bwlog.php"

Сценарий bwlog.php использует @ phep answer предложенную команду windows netstat -e. Вы можете создать файл сценария с помощью блокнота, а код:

<?php
//Task to schedule "C:\xampp\php\php.exe -f C:\xampp\htdocs\bwlog.php"
//Store console command result
$netstat=shell_exec("netstat -e");
//Start of the bytes transfered line
$line=substr($netstat,strpos($netstat,"Bytes"));    
//End of the line
$line=substr($line,0,strpos($line,"\n"));   
//Get rid of the whitespaces 
$bytes=preg_replace('/\s+/', ' ',$line);    
//Extracting only bytes downloaded
$bytes=substr($bytes,$start=strpos($bytes,' ')+1,strrpos($bytes,' ')-$start);
//Append the .CSV file  
file_put_contents('C:\xampp\htdocs\bwlog.csv',PHP_EOL.time().', '.$bytes,FILE_APPEND);
?>

Затем я обработал .csv в программе для работы с электронными таблицами, чтобы вычислить скорость загрузки (пропускную способность), используя разницу между 2-байтовыми значениями и разницу между двумя соответствующими значениями времени ( байт / сек ).

Не стесняйтесь спрашивать исправление для записи загруженных байтов. Желаю это быть полезным.

...