Что нового

Есть ли способ отслеживания скорости интернет соединения в данную секунду?

Kent47

Новичок
Сообщения
7
Репутация
1
Какой командой и можно ли вообще можно отследить (бурную) интернет активность в системе а не само наличие есть или нет (PING)?
Можно ли как то узнать нагрузку на сеть в данную секунду?
Сервисы и программы тестируют сразу и на всю и без того нагружая канал.
Простая пинговка (PING в DOS) не прокатывает - даже и при нагрузке (скачивании) пинг проходит как и без скачивания.

Как решение думал найти какой-то определенный маленький софт показывающий в трее скорость и там уже делать прицел на него,может кто сталкивался с таким запросом?
 

hedji

Продвинутый
Сообщения
409
Репутация
91
Ctrl-Alt-Del --> Диспетчер задач --> вкладка Производительность --> раздел Ethernet (это в Win10, в Win7 вроде отдельная вкладка "Сеть" была).
 

AZJIO

Меценат
Меценат
Сообщения
2,756
Репутация
1,151
Не сталкивался, но искал. Сам хочу тоже попробовать написать программу рисующую график в окне, проблема только в запросе скачанного за секунду. Но в большей степени хотел бы это на Linux, потому что в Windows есть бесплатные аналоги (NetWorx v5.5.5).
Алгоритм не сложный, храним точки графика в массиве и рисуем их в координатах, если нет скачков, то сдвигаем картинку влево и рисуем точку справа, если скачок скачивания, то перерисовываем масштабируя, ну и реакция на изменение размеров окна. С математической точки зрения задача интересная. Но судя по тому, что при установке аналогов прога запрашивает какое устройство следить или все, то боюсь ещё и с этим могут возникнуть проблемы.

Перечитал, похоже вам требуется другая задача, не отслеживание скачивания а тест скорости.
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,659
Репутация
2,457
Как то так может:
Код:
Global $objWMIService = ObjGet('winmgmts:\\localhost\root\CIMV2')
Global Const $wbemFlagReturnImmediately = 0x10
Global Const $wbemFlagForwardOnly = 0x20

HotKeySet('{ESC}', _Exit)

While 1
    Sleep(500)
    
    $colItems = $objWMIService.ExecQuery('SELECT * FROM Win32_PerfRawData_Tcpip_NetworkInterface', 'WQL', $wbemFlagReturnImmediately + $wbemFlagForwardOnly)
    
    If IsObj($colItems) Then
        For $objItem In $colItems
            $iBytesSent = Round($objItem.BytesSentPersec / 1024 / 1024, 2)
            $iBytesRecv = Round($objItem.BytesReceivedPersec / 1024 / 1024, 2)
            
            $sData = ''
            
            If $iBytesSent Then
                $sData &= 'Sent: ' & $iBytesSent & ' mb' & @CRLF
            EndIf
            
            If $iBytesRecv Then
                $sData &= 'Received: ' & $iBytesRecv & ' mb' & @CRLF
            EndIf
            
            ToolTip($sData)
        Next
    EndIf
WEnd

Func _Exit()
    Exit
EndFunc
 

InnI

AutoIT Гуру
Сообщения
4,548
Репутация
1,249
 
Автор
Kent47

Kent47

Новичок
Сообщения
7
Репутация
1
спасибо ребят, потестирую на выходных.
нужно именно условие загрузки сайта\файла а пинг как я читал он только скажет что пакеты пришли и сайт доступен (писал когда то на DOS простейший скриптик проверки доступности сайта и если нет-не доступен, то сигнал)
 

Andrey_A

Знающий
Сообщения
125
Репутация
12
Как то так может
Немного подправил ваш код, не на всех ПК может работать, т.к. $objItem.BytesSentPersec и $objItem.BytesReceivedPersec могут иметь несколько значений, и если последнее значение 0, то будет всегда выдавать 0, поэтому нужна проверка на первые не нулевые данные + строка SELECT BytesReceivedPerSec,BytesSentPerSec позволяет быстрее получать необходимое.
Код:
Global $objWMIService = ObjGet('winmgmts:\\localhost\root\CIMV2')
$aStart=_GetTraffic_WMI()
HotKeySet('{ESC}',_Exit)

While 1
  Sleep(1000)
  $aEnd=_GetTraffic_WMI()
  $sLine='DN: '&_Get_Inet($aEnd[0]-$aStart[0])&@CRLF&'UP: '&_Get_Inet($aEnd[1]-$aStart[1])
  ToolTip($sLine,5,5)
  $aStart=$aEnd
WEnd

Func _GetTraffic_WMI()
  Dim $aRet=[0,0],$colItems=$objWMIService.ExecQuery('SELECT BytesReceivedPerSec,BytesSentPerSec FROM Win32_PerfRawData_Tcpip_NetworkInterface','WQL',48)
  If Not IsObj($colItems)Then Return $aRet
  For $objItem In $colItems
    $aRet[0]=Number($objItem.BytesReceivedPersec)
    $aRet[1]=Number($objItem.BytesSentPersec)
    If $aRet[0]Or $aRet[1]Then Return $aRet
  Next
  Return $aRet
EndFunc

Func _Get_Inet($iIndex,$n=0x00100000,$sLine=' mB')
  If $iIndex<$n Then Dim $n=1024,$sLine=' kB'
  Return _RTochkaZap(StringFormat('%.1f',Round($iIndex/$n,2))&$sLine)
EndFunc

Func _RTochkaZap($fLine)
  Return StringReplace(StringInStr($fLine,'.')? $fLine : $fLine&'.0','.',',')
EndFunc

Func _Exit()
    Exit
EndFunc
 
Последнее редактирование:
Верх