Что нового

Получить состояния сетевых соединений программы

alex33

Скриптер
Сообщения
1,457
Репутация
186
Получить состояния соединений указанного процесса из ответа netstat:
Код:
; пример
If Not ProcessExists("Skype.exe") Then
MsgBox(0, "skype не запущен", "программа Skype.exe не запущена")
Exit
EndIf
; получаем состояния у скайпа
$state = _GetConnectionState("Skype.exe")
If $state <> "" Then
MsgBox(0, "get state skype connections", $state)
Else
MsgBox(0, "соединений нет", "соединения у skype не найдены")
EndIf

; Функция _GetConnectionState получает состояния соединений указанного процесса
; параметры:
; $process имя или PID процесса для которого требуется получить состояния соединений
; значение по умолчанию: текущий выполняющийся скрипт.
; $ret_flag 0 (по умолчанию) вернуть элементы разделённые символом "|",
; 1 вернуть массив ($array[0] количество найденых соединений).
; $typeret 0 (по умолчанию) вернуть состояния,
; 1 вернуть [локальные IP-адреса]:[локальные порты],
; 2 вернуть [удалённые IP-адреса]:[удалённые порты].
Func _GetConnectionState($process = @AutoItPID, $ret_flag = 0, $typeret = 0)
$ret = ""
$runpid = Run("netstat -nb", "", @SW_HIDE, 6)
$runread = ""
While Not @error
$runread &= StdoutRead($runpid)
WEnd
$runread = StringStripWS($runread, 4)
$split = StringSplit($runread, " ")
For $c = 1 To $split[0]
If StringInStr($split[$c], $process) > 0 Then
If $typeret = 0 Then
$fc = $c - 1
ElseIf $typeret = 1 Then
$fc = $c - 3
ElseIf $typeret = 2 Then
$fc = $c - 2
Else
Return SetError(1, 0, 0)
EndIf
$ret &= $split[$fc]&"|"
EndIf
Next
$ret = StringReplace($ret, "|", "", -1)
If $ret_flag = 0 Then
Return $ret
ElseIf $ret_flag = 1 Then
$split2 = StringSplit($ret, "|")
Return $split2
Else
Return SetError(2, 0, 0)
EndIf
EndFunc
 
Верх