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

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » VBS/WSH/JS - Проверка строки на соответствие правил именования DNS

Ответить
Настройки темы
VBS/WSH/JS - Проверка строки на соответствие правил именования DNS

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


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

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


Может, есть у кого готовый скрипт?
Есть строка вида device.domain.zone.
Необходимо её проверить на соответствие правилам именования DNS, то есть: англ. буквы, точка, тире, цифры, если что-то не так - выдать error. Как проверить - я примерно понимаю с помощью RegExp, но как проверить, чтобы в строке не было, допустим, 2-3-много точки подряд? 2-3 тире?

Отправлено: 14:40, 28-11-2019

 

Ветеран


Contributor


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

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


Цитата YuS_2:
к тому же, не думаю, что микрософт выпускает софт противоречащий неким стандартам доменных имен. »
«Произвольно расширяющий» или «Слишком широко трактующий» стандарты — легко! Примеров тому тьма: любая корпорация (или конгломерат корпораций), имеющая монопольное или близкое к нему положение на рынке или в своей (полу)закрытой нише, успела отметиться на данном поприще, что IBM, что Microsoft, что Apple, что Google и т.п.

Цитата YuS_2:
Просто, есть подозрение, что RFC датированный 1987 годом, наверное несколько устарел, »
Вполне возможно, что и появились какие-то расширения его. Я тоже не стал глы́́боко копать в развитие .

Отправлено: 12:11, 01-12-2019 | #21



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

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


Аватара для YuS_2

Ветеран


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

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


Цитата Iska:
«Произвольно расширяющий» или «Слишком широко трактующий» стандарты — легко! »
Согласен, но только частично. То, что касается их собственных продуктов, они вольны создавать собственные стандарты или даже "соглашения", но что касается доменных имен (а сейчас мы говорим именно о них):
- тут им разгуляться особо негде, крылья будут быстро подрезаны.

-------
scio me nihil scire


Отправлено: 12:23, 01-12-2019 | #22


Ветеран


Contributor


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

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


YuS_2, у них там много чего разрешено:
Цитата:
Код: Выделить весь код
PS C:\> [uri]::CheckHostName('device.doma_in.zone')
Dns

PS C:\> [uri]::CheckHostName('device.doma----in.zone')
Dns

PS C:\> [uri]::CheckHostName('260.260.260.260')
Dns
А вот тут: dns - Can (domain name) subdomains have an underscore "_" in it? - Stack Overflow идёт нешуточная битва как раз про это.

P.S. «После речи президента последует пресс-конференция о том, как следует понимать то, о чём он хотел сказать»™ .

Отправлено: 12:45, 01-12-2019 | #23


Аватара для YuS_2

Ветеран


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

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


Цитата Iska:
у них там много чего разрешено »
это да. Но второй и третий, вроде не запрещено... буквы-цифры-и-дефис-между-ними. Там где 260, это не IP, так что вроде бы правильно определено...
Цитата Iska:
После речи президента последует пресс-конференция о том, как следует понимать то, о чём он хотел сказать »
где-то, примерно так и есть, судя по той дискуссии...

-------
scio me nihil scire


Отправлено: 14:17, 01-12-2019 | #24


Ветеран


Contributor


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

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


Цитата glukin:
уже есть гигантский скрипт на vbs, надо мне будет этот кусок туда внедрить. »
Значит, надо написать функцию, вызов которой можно вставить, например, в If, в аргументе которой DNS, а возвращает она или Истину (правильное DNS) или Ложь.
Если тупо решать задачу, как она поставлена, нагло заимствовать регулярку у Iska
Код: Выделить весь код
MsgBox "Device1.domain1.ru" + " === " + CStr(X_DNS("Device1.domain1.ru"))

MsgBox "Device1.domain+1.ru" + " === " + CStr(X_DNS("Device1.domain+1.ru"))
MsgBox "Device1.domainЪ1.ru" + " === " + CStr(X_DNS("Device1.domainЪ1.ru"))
MsgBox "Device1..domain1.ru" + " === " + CStr(X_DNS("Device1..domain1.ru"))
MsgBox "Device1.domain1-.ru" + " === " + CStr(X_DNS("Device1.domain1-.ru"))
MsgBox ".Device1.domain1.ru" + " === " + CStr(X_DNS(".Device1.domain1.ru"))
MsgBox "Device1.domain1.ru-" + " === " + CStr(X_DNS("Device1.domain1.ru-"))

MsgBox "device-2.domain.1.ru3" + " === " + CStr(X_DNS("device-2.domain.1.ru3"))
MsgBox "45-deVice.3.domain-4.5ru" + " === " + CStr(X_DNS("45-deVice.3.domain-4.5ru"))

'''''''''''''''''''''''''''''
Function X_DNS(x)
    X_DNS = True
    
    With CreateObject("VBScript.RegExp")
        .Pattern = "^([a-z0-9]|[a-z0-9][a-z0-9\-]{0,61}[a-z0-9])(\.([a-z0-9]|[a-z0-9][a-z0-9\-]{0,61}[a-z0-9]))*$"
        .IgnoreCase = True
        .Global = True
        X_DNS = .Test(x)
        If Not X_DNS Then Exit Function
    End With
    
    X_DNS_Err = Array("..", "--", "-.", ".-")
    X_DNS_Err1 = Array(".", "-")
    
    For Each X_DNS_i In X_DNS_Err
        X_DNS = InStr(1, x, X_DNS_i) = 0
        If Not X_DNS Then Exit Function
    Next
    
    For Each X_DNS_i In X_DNS_Err1
        X_DNS = Left(x, 1) <> X_DNS_i And Right(x, 1) <> X_DNS_i
        If Not X_DNS Then Exit Function
    Next
End Function

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.

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

Отправлено: 16:56, 01-12-2019 | #25


Ветеран


Contributor


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

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


Цитата YuS_2:
Там где 260, это не IP, так что вроде бы правильно определено... »
Это-то понятно. Я про то, что — «гольные цифры», никаких там тебе:
Цитата:
<label> ::= <letter> [ [ <ldh-str> ] <let-dig> ]
.

Отправлено: 17:08, 01-12-2019 | #26


Аватара для YuS_2

Ветеран


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

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


Цитата Iska:
Я про то, что — «гольные цифры», никаких там тебе »
Да, то, что является проверкой доменного имени в dotnet, явно не соответствует rfc1034. Ни объяснить, ни аргументировать это я не могу... тут только если микрософт соизволит пояснить свое творение, но для этого надо их как-то достать. У меня нет ни желания, ни возможностей для этого, так что воспримем это как данность.

-------
scio me nihil scire


Отправлено: 20:20, 01-12-2019 | #27


Ветеран


Contributor


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

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


Цитата YuS_2:
У меня нет ни желания, ни возможностей для этого, так что воспримем это как данность. »
Присединюсь, коллега!

Отправлено: 21:37, 01-12-2019 | #28



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » VBS/WSH/JS - Проверка строки на соответствие правил именования DNS

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Доступ - Глюк с одним из правил встроенного брандмауэра,вообще не настраивается одно из правил интерактивный Microsoft Windows 7 0 11-07-2009 07:06
проверка работоспособности DNS сервера piling Microsoft Windows NT/2000/2003 14 21-05-2009 13:02
[решено] проверка XML-файла на соответствие XML schema в IE 6 и Firefox 2 dimait Вебмастеру 4 23-08-2007 02:02
Редактирование DNS из командной строки keyF Сетевые технологии 2 29-12-2004 19:08
Как изменить из командной строки DNS на клиенте? Myckyc Сетевые технологии 1 26-08-2003 04:20




 
Переход