Что нового

[Сеть, интернет] Блокировка портов

r35p3ct

Продвинутый
Сообщения
226
Репутация
60
Привет!
Есть ли возможность заблокировать какой либо порт, по типу фаера?
Тоесть закрыть соединение сторонней проги, через определенный порт.
 
Автор
R

r35p3ct

Продвинутый
Сообщения
226
Репутация
60
Через TCP функции нельзя занять-закрыть скриптом этот порт-соединение?
Может есть какая возможность это сделать через winsock или объекты?
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5 379
Репутация
2 711
Не думаю, что через Objects можно это сделать, и скорее всего без сервиса здесь не обойтись.

А вообще, AutoIt в последнее время стал мало чем отличаться от других языков программирования. Поэтому, в 90-95% случаев на AutoIt можно написать все тоже самое, что и на других языках высокого уровня, и в большинстве случаев, это будет намного проще.
 
Автор
R

r35p3ct

Продвинутый
Сообщения
226
Репутация
60
Другие языки вроде работают с сетью через wsock32.dll, но полезных функций я не обнаружил в ней(может плохо смотрю)
PS Есть Tcpview, но консольная версия не может закрывать соединения(
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5 379
Репутация
2 711
К сожалению я не разбирался в этом вопросе, но могу сказать точно, что это не тривиальная задача. Вот подробная статья "Пишем свой собственный Firewall на Delphi". К сожалению на примере Delphi, но это существенно не меняет погоды. Дерзай, все в твоих руках.

:smile:
 
Автор
R

r35p3ct

Продвинутый
Сообщения
226
Репутация
60
Вопрос решен.
Код:
Func _DisableConnection($lIP,$lP,$rIP,$rP)
$hIPHLPAPI = DllOpen("iphlpapi.dll")
	Local $tMIB_TCPROW = DllStructCreate("dword State;" & _
			"dword LocalAddr;" & _
			"dword LocalPort;" & _
			"dword RemoteAddr;" & _
			"dword RemotePort")

	DllStructSetData($tMIB_TCPROW, "State", 12) ; MIB_TCP_STATE_DELETE_TCB

Local $aIPLocal = StringSplit($lIP, ".")
$iIPLocal = Dec(Hex($aIPLocal[4], 2) & Hex($aIPLocal[3], 2) & Hex($aIPLocal[2], 2) & Hex($aIPLocal[1], 2))

DllStructSetData($tMIB_TCPROW, "LocalAddr", $iIPLocal)

$iPortLocal = Dec(Hex(BinaryMid(Number($lP), 1, 2)))
;~ $iPortLocal ='0'
	DllStructSetData($tMIB_TCPROW, "LocalPort", $iPortLocal)

			Local $aIPRemote = StringSplit($rIP, ".")
			$iIPRemote = Dec(Hex($aIPRemote[4], 2) & Hex($aIPRemote[3], 2) & Hex($aIPRemote[2], 2) & Hex($aIPRemote[1], 2))


	DllStructSetData($tMIB_TCPROW, "RemoteAddr", $iIPRemote)

	Local $aPortRemote = StringRegExp($rP, "\A\d{1,5}", 3)

		$iPortRemote = Dec(Hex(BinaryMid(Number($aPortRemote[0]), 1, 2)))


	DllStructSetData($tMIB_TCPROW, "RemotePort", $iPortRemote)

	Local $aCall = DllCall($hIPHLPAPI, "int", "SetTcpEntry", "ptr", DllStructGetPtr($tMIB_TCPROW))

	If @error Or $aCall[0] Then
		Return SetError(2, 0, 0)
	EndIf

	Return 1

EndFunc   ;==>_DisableConnection
 

Денис

Знающий
Сообщения
35
Репутация
8
Подскажите пожалуйста, этот способ закрывает активное соединение с возможностью установить его заново или же блокирует возможность открыть его в будущем?

Кстати функция у меня не работает, возвращает 0, в чем может быть дело?
 
Верх