|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] работа с диапазонами ip адресов |
|
[решено] работа с диапазонами ip адресов
|
Пользователь Сообщения: 105 |
Профиль | Отправить 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 |
Старожил Сообщения: 367
|
Профиль | Отправить PM | Цитировать Цитата Dump:
Цитата Dump:
|
||
------- Отправлено: 17:00, 25-11-2009 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Пользователь Сообщения: 105
|
Профиль | Отправить PM | Цитировать Цитата kaster:
За код спасибо!!! |
|
Отправлено: 21:15, 25-11-2009 | #3 |
Must AutoIt Сообщения: 3054
|
Профиль | Сайт | Отправить 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 |
------- Последний раз редактировалось Creat0R, 25-11-2009 в 22:52. Отправлено: 22:39, 25-11-2009 | #4 |
Googler Сообщения: 3665
|
Профиль | Отправить 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
|
Профиль | Отправить PM | Цитировать Creat0R, amel27,
Если я правильно понял в первом примере используется дополнительный модуль: а во втором примере его нет, это ошибка или так задуманно ? А можно немного подробнее описать Функцию _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
|
Профиль | Отправить PM | Цитировать Цитата Dump:
Цитата Dump:
Цитата Dump:
- API ф-ция inet_addr из Ws2_32.dll преобразует адрес в целое число (4 байта), где каждый байт отвечает за один октет; - порядок байтов в полученном значении обратный: младший байт отвечает за старший октет и т.д., поэтому перед сравнением порядок байтов нужно "перевернуть", чтобы вес октета соответствовал весу байта; - после этого операция сравнения адресов идентична сравнению целых чисел; - кроме прочего inet_addr проверяет корректность IP адреса, выдавая ошибку на адреса типа "300.1.1.1" |
|||
Отправлено: 09:27, 26-11-2009 | #7 |
Пользователь Сообщения: 105
|
Профиль | Отправить PM | Цитировать |
Отправлено: 10:07, 26-11-2009 | #8 |
Googler Сообщения: 3665
|
Профиль | Отправить PM | Цитировать Цитата Dump:
|
|
Отправлено: 10:24, 26-11-2009 | #9 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Прочее - [решено] Увеличение количества 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 |
|