2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




 
 Фильтрация в windows bat
Сообщение24.05.2018, 17:28 
Чтобы не сыпать в одну тему разные вопросы, есть вот такой
Есть вывод команды nslookup в таком вот виде:
Код:
C:\>nslookup -ty=A+AAAA google.com 8.8.8.8
╤хЁтхЁ:  google-public-dns-a.google.com
Address:  8.8.8.8

Не заслуживающий доверия ответ:
╚ь :     google.com
Addresses:  2a00:1450:4010:c08::66
          64.233.165.138
          64.233.165.113
          64.233.165.139
          64.233.165.102
          64.233.165.100
          64.233.165.101


C:\>
Как отфильтровать (то есть вывести только) то что идет после "Adresses:"? Можно с самим "Adresses:"

Сейчас я использую команду nslookup -ty=any google.com 8.8.8.8 который дает вот такой вывод

(Оффтоп)

Код:
C:\>nslookup -ty=any google.com. 8.8.8.8
╤хЁтхЁ:  google-public-dns-a.google.com
Address:  8.8.8.8

Не заслуживающий доверия ответ:
google.com      internet address = 64.233.165.101
google.com      internet address = 64.233.165.113
google.com      internet address = 64.233.165.139
google.com      internet address = 64.233.165.102
google.com      internet address = 64.233.165.138
google.com      internet address = 64.233.165.100
google.com      AAAA IPv6 address = 2a00:1450:4010:c08::66
google.com      MX preference = 10, mail exchanger = aspmx.l.google.com
google.com      text =

        "facebook-domain-verification=22rm551cu4k0ab0bxsw536tlds4h95"
google.com      nameserver = ns4.google.com
google.com      nameserver = ns1.google.com
google.com      text =

        "docusign=05958488-4752-4ef2-95eb-aa7ba8a3bd0e"
google.com      text =

        "v=spf1 include:_spf.google.com ~all"
google.com      MX preference = 20, mail exchanger = alt1.aspmx.l.google.com
google.com      MX preference = 50, mail exchanger = alt4.aspmx.l.google.com
google.com      ??? unknown type 257 ???
google.com      MX preference = 40, mail exchanger = alt3.aspmx.l.google.com
google.com      MX preference = 30, mail exchanger = alt2.aspmx.l.google.com
google.com      nameserver = ns3.google.com
google.com      nameserver = ns2.google.com
google.com
        primary name server = ns1.google.com
        responsible mail addr = dns-admin.google.com
        serial  = 197873648
        refresh = 900 (15 mins)
        retry   = 900 (15 mins)
        expire  = 1800 (30 mins)
        default TTL = 60 (1 min)

C:\>
и к которому я применяю findstr вот так:
Код:
C:\>nslookup -ty=any google.com. 8.8.8.8 2>nul | findstr /c:
"address"
google.com      internet address = 64.233.165.101
google.com      internet address = 64.233.165.113
google.com      internet address = 64.233.165.138
google.com      internet address = 64.233.165.139
google.com      internet address = 64.233.165.100
google.com      internet address = 64.233.165.102
google.com      AAAA IPv6 address = 2a00:1450:4010:c08::8a

C:\>

Но использование ключа -any в nslookup является негуманным по отношению к DNS серверам. А некоторые могут и неответить.

 
 
 
 Re: Фильтрация в windows bat
Сообщение24.05.2018, 18:56 
Ну если Вас устроят только IPv4 адреса, то подойдёт такая команда:
Код:
nslookup -ty=A+AAAA ya.ru 8.8.8.8 2>nul |findstr /R /C:"^[Adres:]*   * *[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*$" | findstr /v /C:"8.8.8.8"
Разумеется строку 8.8.8.8 лучше использовать из переменной, раз уж всё равно в батнике используете:
Код:
@nslookup -ty=A+AAAA %1 %2 2>nul |findstr /R /C:"^[Adres:]*   * *[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*$" | findstr /v /C:"%2"
В обоих случаях между первой и второй звёздочкой стоит символ табуляции, а не пробел, как между второй и третьей. Без второго параметра (адреса сервера) вызывать не рекомендуется, нельзя отличить адрес сервера от его ответа.

Примеры вызова:
код: [ скачать ] [ спрятать ]
Используется синтаксис Text
Z:\>nslookup -ty=A+AAAA google.com 8.8.8.8   2>nul  | findstr /R /C:"^[Adres:]* * *[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*$"   | findstr /v /C:"8.8.8.8"
          173.194.220.102
          173.194.220.113
          173.194.220.139
          173.194.220.101
          173.194.220.138
          173.194.220.100

Z:\>nslookup -ty=A+AAAA ya.ru 8.8.8.8   2>nul  | findstr /R /C:"^[Adres:]*      * *[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*$"   | findstr /v /C:"8.8.8.8"
          87.250.250.242

Z:\>nslookup -ty=A+AAAA rbc.ru 8.8.8.8   2>nul  | findstr /R /C:"^[Adres:]*     * *[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*$"   | findstr /v /C:"8.8.8.8"
Addresses:  185.72.229.13
          80.68.253.13

Z:\>nslookup -ty=A+AAAA chipdip.ru 8.8.8.8   2>nul  | findstr /R /C:"^[Adres:]* * *[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*$"   | findstr /v /C:"8.8.8.8"
Address:  37.230.155.34

Z:\
Обратите внимание на последний вариант, если адрес только один, то слово Addresses сокращается.

 
 
 
 Re: Фильтрация в windows bat
Сообщение24.05.2018, 20:01 
Dmitriy40
Ага, идея понятна. Все-таки фильтровать по структуре IP-адреса.
Dmitriy40 в сообщении #1314653 писал(а):
Обратите внимание на последний вариант, если адрес только один, то слово Addresses сокращается.

Да, поэтому вот это, похоже, лишнее:
Код:
^[Adres:]*     * *

фактически достаточно
Код:
findstr /R /C:".*[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*"  | findstr /v /C:"8.8.8.8"


Dmitriy40 в сообщении #1314653 писал(а):
Разумеется строку 8.8.8.8 лучше использовать из переменной,

На самом деле опрашивается множество конкретных серверов, их адреса hardcoded в батнике, но если бы делался один запрос то конечно.

 
 
 
 Re: Фильтрация в windows bat
Сообщение24.05.2018, 20:13 
wrest в сообщении #1314679 писал(а):
фактически достаточно
Код:
findstr /R /C:".*[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*"  | findstr /v /C:"8.8.8.8"
Не уверен, тут ведь ожидается лишь IPv4 адрес в любом месте строки, а что будет если цифры адреса встретятся в имени сервера к примеру или ещё где-нибудь в тексте? Можно налететь на ошибку. Впрочем если с Вашими конкретными серверами всё работает, то да, можно и короче.

 
 
 
 Re: Фильтрация в windows bat
Сообщение24.05.2018, 20:20 
Dmitriy40 в сообщении #1314684 писал(а):
Впрочем если с Вашими конкретными серверами всё работает, то да, можно и короче.

У меня в вашем варианте не работает: я не справился со вставлением символа табуляции :)

 
 
 
 Re: Фильтрация в windows bat
Сообщение24.05.2018, 20:43 
wrest
Запустите блокнот или любой простой редактор, нажмите там клавишу Tab, выделите символ табуляции (клавиатурой: Home, Shift-End), заберите в буфер Ctrl-C и потом вставьте в нужное место строки. :D

 
 
 [ Сообщений: 6 ] 


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group