Что нового

(автозагрузка)проверка ip только при прогрузившемся Vpn.

yaodnako

Продвинутый
Сообщения
120
Репутация
78
а как бы так прикрутить скрипт на автоите,например он сам прописывает айпи при перезагрузки в файл. вопрос как сделать так - чтобы он выполнился только тогда,когда запустился впн и затем после успешного вытаскивания айпи прекращал работу!таймаут не предлагать,нужно как то задать ему ожидание впн'а(помню что с впн связан екзешник rasphone.exe - может как то ожидание на его выполнение поставить?)
И еще пример - как сделать так,чтобы он дожидался коннекта по сети (тут как вариант можно сделать таймаут большой,но хотелось бы другой вариант найти)и только затем выполнялся(без впн'а)?
 

madmasles

Модератор
Глобальный модератор
Сообщения
7 790
Репутация
2 319
Re: выполнение скрипта только после коннекта с локалкой.(после впн'а+)

yaodnako
По второму вопросу, наверное, так можно:
Код:
HotKeySet("{ESC}", "_MyExit")
While 1
	If @IPAddress2 <> "0.0.0.0" Then
		MsgBox(0, "", "Есть подключение по локальной сети")
		ExitLoop
	EndIf
	Sleep(1000)
WEnd
Func _MyExit()
	Exit
EndFunc   ;==>_MyExit
 
Автор
yaodnako

yaodnako

Продвинутый
Сообщения
120
Репутация
78
Re: выполнение скрипта только после коннекта с локалкой.(после впн'а+)

точно :smile: такая простота ... про сеть понятно.Теперь осталось понять как выставить ожидание впн'а ? А как можно сделать ожидание запуска rasphone.exe?(вроде бы эта прога за впн запуск отвечает) - есть ли прямая функция ожидания выполнения проги? можно попробовать постоянно вытаскивать список процессов на конкретную программу.Запуск впн'а это секунда - успеет ли заметить?

p.s.To madmasles : Тут таки есть один трабл.
я проверил только что впн - когда я подсоединяюсь это @IPAddress1,когда не присоединяюсь - @IPAddress1 становится локальным. то есть @ipadress от 1 до 4 меняется в зависимости от соединений!
получается нужно сделать проверки на локал,у меня это 10.139.x.x а впн 95.x.x.x/
пока думаю как это все в кучу собрать :smile:
 

madmasles

Модератор
Глобальный модератор
Сообщения
7 790
Репутация
2 319
Re: выполнение скрипта только после коннекта с локалкой.(после впн'а+)

yaodnako
А если так попробовать:
Код:
#include <WinAPIEx.au3>
#include <Date.au3>

HotKeySet("{ESC}", "_MyExit")
If _WinAPI_IsNetworkAlive() <> 0 Then
	If StringLeft(@IPAddress1, 6) = "10.139" Then
		FileWriteLine(@ScriptDir & "\Test.txt", _Now() & ". Локальная сеть. IP-адрес: " & @IPAddress1)
	Else
		FileWriteLine(@ScriptDir & "\Test.txt", _Now() & ". Интернет. IP-адрес: " & @IPAddress1)
	EndIf
EndIf
While 1
	If ProcessExists("rasphone.exe") Then
		ProcessWaitClose("rasphone.exe")
		If _WinAPI_IsNetworkAlive() <> 0 Then
			If StringLeft(@IPAddress1, 6) = "10.139" Then
				FileWriteLine(@ScriptDir & "\Test.txt", _Now() & ". Локальная сеть. IP-адрес: " & @IPAddress1)
			Else
				FileWriteLine(@ScriptDir & "\Test.txt", _Now() & ". Интернет. IP-адрес: " & @IPAddress1)
			EndIf
		EndIf
	EndIf
	If ProcessExists("rasdial.exe") Then
		ProcessWaitClose("rasdial.exe")
		If _WinAPI_IsNetworkAlive() <> 0 Then
			If StringLeft(@IPAddress1, 6) = "10.139" Then
				FileWriteLine(@ScriptDir & "\Test.txt", _Now() & ". Локальная сеть. IP-адрес: " & @IPAddress1)
			Else
				FileWriteLine(@ScriptDir & "\Test.txt", _Now() & ". Интернет. IP-адрес: " & @IPAddress1)
			EndIf
		EndIf
	EndIf
	Sleep(100)
WEnd

Func _MyExit()
	Exit
EndFunc   ;==>_MyExit
Наверное, можно убрать проверку rasphone.exe, он, вроде через rasdial.exe работает. К сожалению, не могу проверить.
 
Автор
yaodnako

yaodnako

Продвинутый
Сообщения
120
Репутация
78
Re: выполнение скрипта только после коннекта с локалкой.(после впн'а+)

когда запускаешь его он создает тхт с одним из айпи.либо локальным,либо впн.если я не запустил еще впн,то прописывается локальный айпи,если запустил впн и запустил скрипт,прописывается интернет айпи.я думаю проще не парится,а сделать,чтоб все айпи заносились в текстовый документ,и если хочется сделать проверки на каждый тип соединения .т.е. если начало строки - 10.139.x.x. Это локалка,если - 95.28.х.х - инет(впн),если это 5.х.х.х - сеть хамачи.Ни rasphone ни rasdial не работают почемуто.скрипт продолжает выполняться...в принципе можно таймаут ему большой поставить или сделать ожидание проги ,для которой, обязателен интернет - к примеру оперу.или сделать пинг ,для проверки инета(если пингуется скажем www.google.ru,значит впн полюбому уже запущен и можно вырубаться). вот что значит выспаться - идеи появлятся сразу начинают :smile:
за пример спасибо.
 

AZJIO

Меценат
Меценат
Сообщения
2 752
Репутация
1 149
Re: выполнение скрипта только после коннекта с локалкой.(после впн'а+)

yaodnako
Посмотри это

Код:
HotKeySet("{ESC}", "_Quit")
; проверка по полному/неполному IP и пингу адрес-ссылке в интернете
Global $iptest='192.168.', $adres='http://www.google.ru/', $IPP=80, $Statys='no'

While 1
_WriteIP2Text(@IPAddress1)
_WriteIP2Text(@IPAddress2)
_WriteIP2Text(@IPAddress3)
_WriteIP2Text(@IPAddress4)
	If $Statys='yes' Then _Ping()
    Sleep(1000)
WEnd

Func _WriteIP2Text($ip)
	If StringInStr($ip, $iptest)>0 Then
		$file = FileOpen(@ScriptDir&'\IP.txt' ,2)
		FileWrite($file, $ip)
		FileClose($file)
		$Statys='yes'
		$iptest=$ip
    EndIf
EndFunc

Func _Ping()
	TCPStartUp()
	$adres = StringRegExpReplace($adres, "(?:ht|f)tp\:\/\/(.*)\/.*", "\1")
While 1
	$socket = TCPConnect(TCPNameToIP($adres), $IPP)
	If @error Then
		ContinueLoop
	Else
		MsgBox(0, "Сообщение", 'Интернет работает'&@CRLF&'Ваш IP: '& $iptest)
		TCPShutdown()
		Exit
		;ExitLoop
	EndIf
    Sleep(1000)
WEnd
EndFunc

Func _Quit()
    Exit
EndFunc
 
Автор
yaodnako

yaodnako

Продвинутый
Сообщения
120
Репутация
78
Re: выполнение скрипта только после коннекта с локалкой.(после впн'а+)

Спасибо.Работает как надо :smile: только вот я только что увидел,что оказывается гадский впн меняет айпи каждый реконнект! раньше такого вроде не было...
Получается нужно теперь думать как бы сделать так,чтобы прога периодически проверяла айпи. При фоновой работе это не проблема,а можно ли сделать так,чтобы прога запускалась сама скажем,каждые 2 часа?и проверяла айпи инета.и если изменился айпи,то прописывала бы новый и затем завершалась.или это фантастика?:smile:
 

AZJIO

Меценат
Меценат
Сообщения
2 752
Репутация
1 149
Re: выполнение скрипта только после коннекта с локалкой.(после впн\'а+)

yaodnako
Вот проверь скрипт с игнорированием, добавь в список игнорирования те сетевые интерфейсы, которые нужно исключить при проверки.
Для запуска каждые 2 часа либо использовать виндовый планировщик, либо nnCron, либо проверку с системным временем добавить.
Меняется наверно внешний временный IP, а внутри-сетевой постоянный, его как я понял нужно добавить в игнорирование $ignore, перечесление через ";".

Код:
HotKeySet("{ESC}", "_Quit")
; проверка интернета по IP, не содержащегося в списке игнорирования и пингу адрес-ссылке в интернете
Global $Statys='no', $adres='http://www.google.ru/', $IPP=80 , $ignore='127.0.0.0;0.0.0.0', $iptest=''

While 1
_WriteIP2Text(@IPAddress1)
_WriteIP2Text(@IPAddress2)
_WriteIP2Text(@IPAddress3)
_WriteIP2Text(@IPAddress4)
	If $Statys='yes' Then _Ping()
    Sleep(1000)
WEnd

Func _WriteIP2Text($ip)
	If StringInStr(';'&$ignore&';', ';'&$ip&';')>0 Then
		Return
	Else
		$iptest=$ip
		$file = FileOpen(@ScriptDir&'\IP.txt' ,2)
		FileWrite($file, $ip)
		FileClose($file)
		$Statys='yes'
    EndIf
EndFunc

Func _Ping()
	TCPStartUp()
	$adres = StringRegExpReplace($adres, "(?:ht|f)tp\:\/\/(.*)\/.*", "\1")
While 1
	$socket = TCPConnect(TCPNameToIP($adres), $IPP)
	If @error Then
		Sleep(1000)
		ContinueLoop
	Else
		MsgBox(0, "Сообщение", 'Интернет работает'&@CRLF&'Ваш IP: '& $iptest)
		TCPShutdown()
		Exit
		;ExitLoop
	EndIf
WEnd
EndFunc

Func _Quit()
    Exit
EndFunc



Добавлено:
Сообщение автоматически объединено:

yaodnako
Можно поставить время до следующей проверки в первом цикле Sleep(7200000), а можно указывать это время в диалоге

Код:
HotKeySet("{ESC}", "_Quit")
; проверка интернета по IP, не содержащегося в списке игнорирования и пингу адрес-ссылке в интернете
Global $Statys=False, $adres='http://www.google.ru/', $IPP=80 , $ignore='127.0.0.0;0.0.0.0', $iptest='', $time=1000


While 1
_WriteIP2Text(@IPAddress1)
_WriteIP2Text(@IPAddress2)
_WriteIP2Text(@IPAddress3)
_WriteIP2Text(@IPAddress4)
	If $Statys=True Then
		_Ping()
	Else
		$time0 = InputBox("Сообщение",  'Введите интервал времени до следующей проверки интернета в секундах'&@CRLF&'"Отмена" - выхода из скрипта', $time/1000, "",270, 150)
		If $time0='' Then
			Exit
		Else
			$time=$time0*1000
		EndIf
	EndIf
    Sleep($time)
WEnd

Func _WriteIP2Text($ip)
	If StringInStr(';'&$ignore&';', ';'&$ip&';')>0 Then
		Return
	Else
		$iptest=$ip
		$file = FileOpen(@ScriptDir&'\IP.txt' ,2)
		FileWrite($file, $ip)
		FileClose($file)
		$Statys=True
    EndIf
EndFunc

Func _Ping()
	TCPStartUp()
	$adres = StringRegExpReplace($adres, "(?:ht|f)tp\:\/\/(.*)\/.*", "\1")
While 1
	$socket = TCPConnect(TCPNameToIP($adres), $IPP)
	If @error Then
		Sleep(1000)
		ContinueLoop
	Else
		$time0 = InputBox("Сообщение",  'Интернет работает, ваш IP: '& $iptest&@CRLF& 'Введите интервал времени до следующей проверки интернета в секундах'&@CRLF&'"Отмена" - выхода из скрипта', $time/1000, "",270, 170)
		If $time0='' Then
			Exit
		Else
			$time=$time0*1000
		EndIf
		TCPShutdown()
		ExitLoop
	EndIf
WEnd
EndFunc

Func _Quit()
    Exit
EndFunc
 
Верх