Nslookup linha de comando com um registro IP como única saída

6

Encontrei o seguinte comando para obter seu IP público atual que funciona bem na linha de comando:

nslookup myip.opendns.com resolver1.opendns.com

Eu quero ser capaz de executar um comando, embora JUST imprima o IP resulante. (No momento, ele mostra o servidor DNS especificado e seu IP, juntamente com todas as outras informações do IE:

Server:  resolver1.opendns.com
Address:  208.67.222.222

Non-authoritative answer:
Name:    myip.opendns.com
Address:  123.123.123.123

Eu quero apenas produzir:     123.123.123.123

Não tenho certeza se o é um sinalizador de linha de comando para obter o que eu quero ou se posso usar algum truque de linha de comando para obter apenas a saída desejada (em última instância, quero redirecionar a saída para um arquivo "> .txt "

    
por BondUniverse 16.09.2014 / 21:51

8 respostas

5

Nslookup com um IP de registro como saída única

Supondo que você esteja usando o Windows, isso pode ser feito usando um simples comando de linha única.

Na linha de comando:

for /f "skip=4 usebackq tokens=2" %a in ('nslookup myip.opendns.com resolver1.opendns.com') do echo %a > ip.txt

De um arquivo em lotes:

for /f "skip=4 usebackq tokens=2" %%a in ('nslookup myip.opendns.com resolver1.opendns.com') do echo %%a > ip.txt

Notas:

  • O endereço IP público é armazenado em um arquivo ( ip.txt ).
  • O texto acima não exige comandos não padrão do Windows, como PowerShell , .Net ou awk .

Leitura Adicional

por 16.09.2014 / 22:45
9

nslookup nunca foi destinado para uso com script. Você realmente quer usar dig , que com a opção +short produz saída legível por máquina de acordo com os parâmetros de consulta.

dig +short myip.opendns.com @resolver1.opendns.com
    
por 03.07.2017 / 16:04
5

Este é um bom exemplo para o awk.

nslookup myip.opendns.com resolver1.opendns.com | awk -F': ' 'NR==6 { print $2 } '

Aqui estamos piping awk, delimitando por ":" e, em seguida, apenas a saída do segundo campo delimitado da linha 6.

    
por 16.09.2014 / 22:02
2

Se você estiver no Windows e tiver o PowerShell instalado (v1 ou superior) (e uma versão do .Net), poderá usar um liner (longo) como este:

[System.Net.Dns]::GetHostAddresses("www.google.com")[0] | Select IPAddressToString -ExpandProperty IPAddressToString | Out-File c:\folder\filename.txt

Isso pesquisará www.google.com e colocará o primeiro endereço IPv4 retornado em um arquivo.

Se você estiver usando o PowerShell v3 + no Windows 8+ (ou Server 2012+), poderá usar o cmdlet Resolve-DnsName em vez da chamada GetHostAddress do .Net. ou seja:

(Resolve-DnsName www.google.com)[0] | Select IPAddressToString -ExpandProperty IPAddressToString | Out-File c:\folder\filename.txt

Basta alterar www.google.com para o seu nome de domínio preferido. Ou coloque-o em um script do PowerShell e configure-o para aceitar um argumento (do nome do domínio que você deseja pesquisar).

Mais informações sobre isso: Como passar um argumento para um script do PowerShell?

    
por 16.09.2014 / 22:11
1

Funciona bem para mim na minha máquina Linux. Eu nunca tentei em outros sistemas, mas o Google tem um monte de artigos sobre como instalar o dig , por exemplo, em Windows

A única coisa a observar, para o domínio de pesquisa dos nomes de host locais, deve ser adicionada explicitamente. Então, se você tiver myhost host em sua rede local com o domínio de pesquisa mynetwork put

dig +short myhost.mynetwork

na linha de comando.

Exemplos:

sergeyi@sergeyi:~$ dig +short google.ru
173.194.222.94

sergeyi@sergeyi:~$ dig A +short google.ru
173.194.222.94

sergeyi@sergeyi:~$ dig AAAA +short google.ru
2a00:1450:4010:c0b::5e
    
por 07.09.2017 / 10:42
0

Se sua meta for recuperar seu IP externo com um script , um possível seria o uso de uma função muito simples do PowerShell:

function Get-ExternalIP {
(Invoke-WebRequest ifconfig.me/ip).Content
}

A execução dessa função retornará seu IP externo e nenhuma outra informação inútil.

Fonte e exemplos: link

Como alternativa, se você quiser obter a resolução de IP para outros hosts , consulte o cmdlet Resolve-DnsName . Infelizmente, seu computador deve estar executando o Windows 8.1 ou o Windows Server 2012 R2 para usar esse cmdlet. Aqui está um exemplo que acabei de realizar:

Espero que isso ajude!

    
por 16.09.2014 / 22:06
0

Simples.

No uso do nslookup:

Definir tipo = A

Em seguida, pesquise. O comando set mostrará apenas as saídas para os registros A. Você pode usar isso para MX, CNAME, AAA etc.

    
por 16.09.2014 / 23:31
0

Não é o ideal, mas às vezes uso esse método:

ping -c 1 myip.opendns.com | grep -ohE "\(([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+)\)" | head -1 | sed "s/[()]//g"

    
por 14.10.2015 / 09:04