Ping server / domain e capture seu IP no Linux

5

Com o Windows, você pode fazer ping de um determinado nome de domínio e capturar o IP como uma variável, mesmo que nenhuma resposta tenha sido recebida. Eu acredito que o comando parecia algo assim:

ping domain.com
for /f "tokens=1,2 delims=[]" %%A in ('ping /n 1 /w 1 domain.com ^| find "Pinging"') do set ipaddress=%%B"'

Isso é basicamente o que estou tentando fazer, mas dentro de um script bash em vez de um arquivo em lotes. Eu me deparei com um monte de perguntas que são muito próximas, mas não exatamente o que estou procurando. Eu não consigo descobrir a melhor maneira de fazer isso.

Alguma ideia?

    
por ICE 02.06.2013 / 04:40

1 resposta

10

Isso deve funcionar na linha de comando ou em um script:

ip=$(ping -c 1 www.google.com | gawk -F'[()]' '/PING/{print $2}')
echo $ip
173.194.34.19

EXPLICAÇÃO

Primeiro, a saída do comando ping sendo analisado:

$ ping -c 1 www.google.com
PING www.google.com (173.194.40.209) 56(84) bytes of data.
64 bytes from par10s12-in-f17.1e100.net (173.194.40.209): icmp_req=1 ttl=52 time=49.8 ms

--- www.google.com ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 49.874/49.874/49.874/0.000 ms
  • ip=$(COMMAND) : atribua a saída de COMMAND à variável $ip .
  • ping -c 1 www.google.com : ping no google uma vez.
  • gawk é uma poderosa linguagem de script que processa a entrada linha por linha e campos por campo.
  • -F'[()]' : -F sets gawk 's delimitador (es) de campo. Aqui, estamos configurando para uma classe de caractere ( [ ] ), especificamente para abrir e fechar parênteses. Isso significa que tudo até o primeiro ) ou ( será o primeiro campo que, em gawk , é $1 . Estamos interessados apenas na primeira linha, então dizemos a gawk para imprimir o 2º campo ( $2 ), que é o IP, somente se a linha atual contiver "PING" ( /PING/ ).

Assim, os resultados de todo o shebang são salvos como ip , ao qual você pode se referir como $ip .

    
por 02.06.2013 / 05:07

Tags