Efficient way to get ip addresses based on a list of hostnames

前端 未结 1 450
说谎
说谎 2020-12-21 21:21

I had to gather a list of IP addresses from a list of hostnames, this is what I came up with:

#!/bin/bash                                                             


        
相关标签:
1条回答
  • 2020-12-21 21:39

    If you mean the latency gets you down, you can do them all in parallel with GNU Parallel:

    parallel -a hosts 'echo -n {}; ping -c1 {} |egrep -o -m 1 "\([0-9]+\.[^\(\r\n]*\)"'
    

    The -a hosts assumes you have the hostnames in a file called hosts.

    hosts:

    virgin
    router
    

    Output:

    virgin(192.168.100.1)
    router(192.168.0.1)
    

    Or, if you don't want a file of hostnames, you can use your loop:

    for h in virgin router; do 
       echo $h; 
    done | parallel 'echo -n {}; ping -c1 {} |egrep -o -m 1 "\([0-9]+\.[^\(\r\n]*\)"'
    

    Alternatively, have a look in the arp cache...

    arp router
    router.asus.com (192.168.0.1) at 8:60:6e:ba:17:c8 on en0 ifscope [ethernet]
    
    arp virgin
    virgin (192.168.100.1) -- no entry
    
    0 讨论(0)
提交回复
热议问题