Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] работа с диапазонами ip адресов

Ответить
Настройки темы
[решено] работа с диапазонами ip адресов

Пользователь


Сообщения: 105
Благодарности: 0

Профиль | Отправить PM | Цитировать


Задача такая:
1. Выяснить IP адрес машины, на которой запущен скрипт.
2. В зависимости от того, в какой диапазон IP попадает машина выполнить определённую команду.

Пример:
Комп. с IP попадающим в диапазон [192.168.10.1-192.168.10.29] При выполнении скрипта отрабатывается команда net use z: \\192.168.10.10\share
Комп. с IP попадающим в диапазон [192.168.10.30-192.168.10.59] При выполнении скрипта отрабатывается команда net use z: \\192.168.10.40\share

И т.д.

Подскажите что почитать, или как примерно сделать

Отправлено: 16:29, 25-11-2009

 

Аватара для kaster

Старожил


Сообщения: 367
Благодарности: 91

Профиль | Отправить PM | Цитировать


Цитата Dump:
Подскажите что почитать »
Help!
Цитата Dump:
Пример:
Комп. с IP попадающим в диапазон [192.168.10.1-192.168.10.29] При выполнении скрипта отрабатывается команда net use z: \\192.168.10.10\share
Комп. с IP попадающим в диапазон [192.168.10.30-192.168.10.59] При выполнении скрипта отрабатывается команда net use z: \\192.168.10.40\share »
Код: Выделить весь код
$aIP = StringSplit(@IPAddress1, '.')
$ip_last = $aIP[$aIP[0]]
If $ip_last <= 29 AND $ip_last >= 1 Then
   Run('net use z: \\192.168.10.10\share')
ElseIf $ip_last >=30 AND $ip_last <=59 Then
   Run('net use z: \\192.168.10.40\share')
EndIf

-------
Русское сообщество пользователей AutoIt
autoit@conference.jabber.ru - Конференция на jabber.ru

Это сообщение посчитали полезным следующие участники:

Отправлено: 17:00, 25-11-2009 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

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


Пользователь


Сообщения: 105
Благодарности: 0

Профиль | Отправить PM | Цитировать


Цитата kaster:
Help! »
И не поспоришь
За код спасибо!!!

Отправлено: 21:15, 25-11-2009 | #3


Аватара для Creat0R

Must AutoIt


Сообщения: 3054
Благодарности: 1009

Профиль | Сайт | Отправить PM | Цитировать


Через _VersionCompare надёжнее:

Код: Выделить весь код
#include <Misc.au3>

If _IPAddressIsInRange("192.168.10.1 - 192.168.10.29") Then
    Run("net use z: \\192.168.10.10\share", "", @SW_HIDE)
EndIf

If _IPAddressIsInRange("192.168.10.30 - 192.168.10.59") Then
    Run("net use z: \\192.168.10.40\share", "", @SW_HIDE)
EndIf

Func _IPAddressIsInRange($sRange_IPs, $sIPAddress = @IPAddress1)
    If Not StringInStr($sRange_IPs, "-") Then Return SetError(1, 0, 0)

    Local $aSplit = StringSplit(StringStripWS($sRange_IPs, 8), "-")
    Local $sIP_Range_1 = $aSplit[1]
    Local $sIP_Range_2 = $aSplit[2]

    Return (_VersionCompare($sIPAddress, $sIP_Range_1) >= 0 And _VersionCompare($sIPAddress, $sIP_Range_2) <= 0)
EndFunc

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community


Последний раз редактировалось Creat0R, 25-11-2009 в 22:52.

Это сообщение посчитали полезным следующие участники:

Отправлено: 22:39, 25-11-2009 | #4


Googler


Сообщения: 3665
Благодарности: 1563

Профиль | Отправить PM | Цитировать


ну и еще вариант UDF - с расширенным контролем ошибок:
Код: Выделить весь код
If _IPAddressIsInRange("192.168.10.1", "192.168.10.29") Then
    Run("net use z: \\192.168.10.10\share", "", @SW_HIDE)
EndIf

If _IPAddressIsInRange("192.168.10.30", "192.168.10.59") Then
    Run("net use z: \\192.168.10.40\share", "", @SW_HIDE)
EndIf

Func _IPAddressIsInRange($sIP_Low, $sIP_High, $sIP = @IPAddress1)
    Local $iIP_Low = DllCall("Ws2_32.dll", "dword", "inet_addr", "str", $sIP_Low)
    Local $iIP_High = DllCall("Ws2_32.dll", "dword", "inet_addr", "str", $sIP_High)
    Local $iIP = DllCall("Ws2_32.dll", "dword", "inet_addr", "str", $sIP)
    ; Меняем порядок байтов на обратный
    $iIP_Low = BitRotate(BitRotate(BitRotate($iIP_Low[0],8,"W"),16,"D"),8,"W")
    $iIP_High = BitRotate(BitRotate(BitRotate($iIP_High[0],8,"W"),16,"D"),8,"W")
    $iIP = BitRotate(BitRotate(BitRotate($iIP[0],8,"W"),16,"D"),8,"W")
    ; Контроль ошибок
    If $iIP_Low = -1 Then Return SetError(1, 1, False)  ; Ошибка в  1-м параметре
    If $iIP_High = -1 Then Return SetError(1, 2, False) ; Ошибка во 2-м параметре
    If $iIP = -1 Then Return SetError(1, 3, False)      ; Ошибка в  3-м параметре

    Return ($iIP >= $iIP_Low) And ($iIP <= $iIP_High)
EndFunc   ;==> _IPAddressIsInRange()

Последний раз редактировалось amel27, 26-11-2009 в 06:47.

Это сообщение посчитали полезным следующие участники:

Отправлено: 05:57, 26-11-2009 | #5


Пользователь


Сообщения: 105
Благодарности: 0

Профиль | Отправить PM | Цитировать


Creat0R, amel27,
Если я правильно понял в первом примере используется дополнительный модуль:
Код: Выделить весь код
#include <Misc.au3>
а во втором примере его нет, это ошибка или так задуманно ?

А можно немного подробнее описать Функцию _IpAddressIsRange, если есть время
На самом деле, диапазонов намного больше, кроме того, оказывается различны даже подсети, т.е.
примерно так: 192.168.106.0; 192.168.65.0; 192.168.47.0 и т.д. это имеет значения в алгоритме работы Функции ?

И ещё, где можно свежую справку скачать, я раньше пользовался справкой версии 3.2.5.4, сейчас версия 3.3.1.3, или там не много изменений ?

Отправлено: 07:58, 26-11-2009 | #6


Googler


Сообщения: 3665
Благодарности: 1563

Профиль | Отправить PM | Цитировать


Цитата Dump:
а во втором примере его нет »
это не просто примеры - это разные функции (UDF), в одном требуется, в другом - нет

Цитата Dump:
это имеет значения в алгоритме работы Функции »
нет, проверяется только вхождение в интервал

Цитата Dump:
можно немного подробнее описать Функцию _IpAddressIsRange »
только по своему варианту:

- API ф-ция inet_addr из Ws2_32.dll преобразует адрес в целое число (4 байта), где каждый байт отвечает за один октет;
- порядок байтов в полученном значении обратный: младший байт отвечает за старший октет и т.д., поэтому перед сравнением порядок байтов нужно "перевернуть", чтобы вес октета соответствовал весу байта;
- после этого операция сравнения адресов идентична сравнению целых чисел;
- кроме прочего inet_addr проверяет корректность IP адреса, выдавая ошибку на адреса типа "300.1.1.1"
Это сообщение посчитали полезным следующие участники:

Отправлено: 09:27, 26-11-2009 | #7


Пользователь


Сообщения: 105
Благодарности: 0

Профиль | Отправить PM | Цитировать


Благодарю за помощь! Всё работает !

Скажите пожалуйста, что за аббревиатура UDF ?
И я пошел учится

Отправлено: 10:07, 26-11-2009 | #8


Googler


Сообщения: 3665
Благодарности: 1563

Профиль | Отправить PM | Цитировать


Цитата Dump:
что за аббревиатура UDF »
UDF (User Defined Function) - определенная пользователем функция (через Func/EndFunc)

Отправлено: 10:24, 26-11-2009 | #9



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] работа с диапазонами ip адресов

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Прочее - [решено] Увеличение количества IP адресов kapitanvagin Сетевые технологии 32 03-09-2009 09:21
Вопрос - [решено] Повисла сеть-кофнликт адресов ip. djeff Защита компьютерных систем 4 04-08-2009 11:29
Прочее - Маршрутизация. Работа с пулом IP адресов menpavel Сетевые технологии 8 10-07-2008 05:15
Интернет - [решено] Растолкуйте, pls, непонятку с разрешением IP адресов в XP (ping, nslookup) MinimumLaw Microsoft Windows 2000/XP 5 24-10-2007 16:19
Интернет - [решено] Как удалить список адресов из списка? Kentuky Microsoft Windows 2000/XP 2 26-09-2007 22:29




 
Переход