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

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

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

Старожил


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

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


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

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

 

Ветеран


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

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


Цитата glukin:
И, кстати,зачем? »
Затем:
Цитата glukin:
готовый скрипт? »

Цитата glukin:
Не должно быть более 1 точки или 1 тире подряд. Точка-тире или тире-точка или подобные сочетания недопустимы. »
Точек подряд быть не может — это разделитель. Тире Дефис — может. Вы же не хотите отсечь национальные домены, в том числе такой домен, как, например, президент.рф ?

Пример с шаблоном, найденным мною, и шаблоном коллеги DJ Mogarych:
Скрытый текст
Код: Выделить весь код
Option Explicit

Dim arrDNSName
Dim objRegExp

Dim elem


arrDNSName = Array( _
				"device.domain.zone", _
				"Device1.domain1.ru", _
				"device-2.domain.1.ru3", _
				"45-deVice.3.domain-4.5ru", _
				"45-deVice..domain-4.5ru", _
				"45-deVice.3.domain--4.5ru", _
				"45-deVice.3.domain-.5ru", _
				"45-deVice.3.-domain.5ru", _
				"45-deVice.3.domain-4.5ru." _
			)

Set objRegExp = WScript.CreateObject("VBScript.RegExp")

objRegExp.IgnoreCase = False
objRegExp.Pattern    = "^([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-]{0,61}[a-zA-Z0-9])(\.([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-]{0,61}[a-zA-Z0-9]))*$"

For Each elem In arrDNSName
	If objRegExp.Test(elem) Then
		WScript.Echo "Match    : " & elem
	Else
		WScript.Echo "Not match: " & elem
	End If
Next

WScript.Echo "==============================================="

objRegExp.Pattern    = "^([A-Za-z0-9-]+\.){2}[A-Za-z0-9-]+$"

For Each elem In arrDNSName
	If objRegExp.Test(elem) Then
		WScript.Echo "Match    : " & elem
	Else
		WScript.Echo "Not match: " & elem
	End If
Next

Set objRegExp = Nothing

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

Отправлено: 09:52, 30-11-2019 | #11



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

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


Старожил


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

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


Спасибо.
И всё-таки: точка-дефис или дефис-точка или подобные сочетания недопустимы.
Да,я хочу отсечь национальные домены, ибо DNS внутренний, а не интернетный.

Отправлено: 10:36, 30-11-2019 | #12


Ветеран


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

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


Цитата glukin:
И всё-таки: точка-дефис или дефис-точка или подобные сочетания недопустимы. »
Первое и второе недопустимы. Разве я сказал что-то другое?!

Цитата glukin:
ибо DNS внутренний, а не интернетный. »
А какая разница? Пространство имён одинаково для всех. Реализации локальных серверов могут отличаться в ту или иную степень упоротости, хотите упарываться вослед — делайте, кто ж запретит.

Отправлено: 20:14, 30-11-2019 | #13


Аватара для YuS_2

Crazy


Contributor


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

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


Цитата Iska:
Первое и второе недопустимы. »
Вроде бы, не совсем так:
Код: Выделить весь код
<#
[enum]::GetNames("UriHostNameType")
Basic		1	узел установлен, однако не удается определить тип.
Dns		2	Имя узла представлено в виде DNS-имени.
IPv4		3	Имя узла представлено в формате IPv4.
IPv6		4	Имя узла представлено в формате IPv6.
Unknown	0	Тип имени узла не поддерживается.
#>

$arr = @(
	"device.domain.zone"
	"device.domain.zone."
	".device.domain.zone"
	"Device1.domain1.ru"
	"device-2.domain.1.ru3"
	"45-deVice.3.domain-4.5ru"
	"45-deVice..domain-4.5ru"
	"45-deVice.3.domain--4.5ru"
	"45-deVice.3.domain-.5ru"
	"45-deVice.3.-domain.5ru"
	"45-deVice.3.domain-4.5ru."
)
$arr|%{ $_ + ' - ' + ([uri]::CheckHostName("$_"))}

-------
scio me nihil scire. Ѫ


Последний раз редактировалось YuS_2, 01-12-2019 в 08:58.


Отправлено: 21:04, 30-11-2019 | #14


Ветеран


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

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


YuS_2, я исходил из RFC 1034 - Domain names - concepts and facilities:
Цитата:
Код: Выделить весь код
<domain> ::= <subdomain> | " "

<subdomain> ::= <label> | <subdomain> "." <label>

<label> ::= <letter> [ [ <ldh-str> ] <let-dig> ]

<ldh-str> ::= <let-dig-hyp> | <let-dig-hyp> <ldh-str>

<let-dig-hyp> ::= <let-dig> | "-"

<let-dig> ::= <letter> | <digit>

<letter> ::= any one of the 52 alphabetic characters A through Z in
upper case and a through z in lower case

<digit> ::= any one of the ten digits 0 through 9
Как можно увидеть, дефис ни в начале октета, ни в конце октета наличествовать не может. В начале октета может быть только буква, в конце октета — только буква или цифра.

Отправлено: 21:52, 30-11-2019 | #15


Ветеран


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

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


Iska, октет тут наверное не при чём

glukin, сделайте простую проверку, какую сможете
а более строго проверит уже то ПО, которое будет эти данные использовать

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


Старожил


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

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


Busla, не, тут смысл сделать проверку именно до ПО, так как оно не стартует с ошибочными dns-записями.

Iska, извините, забыл добавить, что "--" тоже недопустимо.
Вот это вроде работает, но пропускает "--"
^([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-]{0,61}[a-zA-Z0-9])(\.([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-]{0,61}[a-zA-Z0-9]))*$

Последний раз редактировалось glukin, 01-12-2019 в 00:26.


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


Ветеран


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

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


Цитата Busla:
Iska, октет тут наверное не при чём »
Да, попутал термины.

Цитата glukin:
что "--" тоже недопустимо. »
Я же писал, с точки зрения RFC — допустимо.

Цитата glukin:
Вот это вроде работает, но пропускает "--" »
Ну, дабы не усложнять регулярку, сделайте две проверки:
Скрытый текст
Код: Выделить весь код
Option Explicit

Dim arrDNSName
Dim elem


arrDNSName = Array( _
				"device.domain.zone", _
				"Device1.domain1.ru", _
				"device--2.domain.1.ru3", _
				"45-deVice.3.domain-4.5ru", _
				"45-deVice..domain-4.5ru", _
				"45-deVice.3.domain--4.5ru", _
				"45-deVice.3.domain-.5ru", _
				"45-deVice.3.-domain.5ru", _
				"45-deVice.3.domain-4.5ru." _
			)

With WScript.CreateObject("VBScript.RegExp")
	.IgnoreCase = False
	
	For Each elem In arrDNSName
		.Pattern    = "^([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-]{0,61}[a-zA-Z0-9])(\.([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-]{0,61}[a-zA-Z0-9]))*$"
		
		If .Test(elem) Then
			.Pattern = "-{2,}"
			
			If Not .Test(elem) Then
				WScript.Echo "Match    : " & elem
			Else
				WScript.Echo "Not match: " & elem
			End If
		Else
			WScript.Echo "Not match: " & elem
		End If
	Next
End With

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

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


Аватара для YuS_2

Crazy


Contributor


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

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


Цитата Iska:
я исходил из RFC 1034 - Domain names - concepts and facilities: »
Да, возможно, спорить не буду.
Просто, есть подозрение, что RFC датированный 1987 годом, наверное несколько устарел, к тому же, не думаю, что микрософт выпускает софт противоречащий неким стандартам доменных имен. Искать стандарты просто лень, но есть ссылка на документацию от микрософт.

-------
scio me nihil scire. Ѫ


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


Старожил


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

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


Iska,
Цитата Iska:
Ну, дабы не усложнять регулярку, сделайте две проверки »
Спасибо, вроде все как мне нужно работает! Тему можно закрывать.

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



Компьютерный форум 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




 
Переход