How do i get the default gateway in LINUX given the destination?

前端 未结 15 2130
清酒与你
清酒与你 2020-12-13 07:02

I\'m trying to get the default gateway, using the destination 0.0.0.0

I used this command: netstat -rn | grep 0.0.0.0

And it return

相关标签:
15条回答
  • 2020-12-13 07:23

    Another perl thing:

    $return = (split(" ", `ip route | grep default`))[2];<br>
    

    Note: use these backticks before ip and after default

    0 讨论(0)
  • 2020-12-13 07:23
    #!/bin/bash
    
    ##################################################################3
    # Alex Lucard
    # June 13 2013
    #
    # Get the gateway IP address from the router and store it in the variable $gatewayIP
    # Get the Router mac address and store it in the variable gatewayRouter
    # Store your routers mac address in the variable homeRouterMacAddress
    #
    
    # If you need the gateway IP uncomment the next line to get the gateway address and store it in the variable gateWayIP
    # gatewayIP=`sudo route -n | awk '/^0.0.0.0/ {print $2}'` 
    
    homeRouterMacAddress="20:aa:4b:8d:cb:7e" # Store my home routers mac address in homeRouterMac.
    gatewayRouter=`/usr/sbin/arp -a`
    
    # This if statement will search your gateway router for the mac address you have in the variable homeRouterMacAddress
    if `echo ${gatewayRouter} | grep "${homeRouterMacAddress}" 1>/dev/null 2>&1`
    then
      echo "You are home"
    else
      echo "You are away"
    fi
    
    0 讨论(0)
  • 2020-12-13 07:23

    use command below:

    route -n | grep '^0\.0\.\0\.0[ \t]\+[1-9][0-9]*\.[1-9][0-9]*\.[1-9][0-9]*\.[1-9][0-9]*[ \t]\+0\.0\.0\.0[ \t]\+[^ \t]*G[^ \t]*[ \t]' | awk '{print $2}'
    
    0 讨论(0)
  • 2020-12-13 07:25

    The following command returns the default route gateway IP on a Linux host using only bash and awk:

    printf "%d.%d.%d.%d" $(awk '$2 == 00000000 && $7 == 00000000 { for (i = 8; i >= 2; i=i-2) { print "0x" substr($3, i-1, 2) } }' /proc/net/route)
    

    This should even work if you have more than one default gateway as long as their metrics are different (and they should be..).

    0 讨论(0)
  • 2020-12-13 07:31

    If you know that 0.0.0.0 is your expected output, and will be at the beginning of the line, you could use the following in your script:

    IP=`netstat -rn | grep -e '^0\.0\.0\.0' | cut -d' ' -f2`
    

    then reference the variable ${IP}.

    It would be better to use awk instead of cut here... i.e.:

    IP=`netstat -rn | grep -e '^0\.0\.0\.0' | awk '{print $2}'`
    
    0 讨论(0)
  • 2020-12-13 07:35

    For a list of all default gateways, use mezgani's answer, duplicated (and slightly simplified) here:

    /sbin/ip route | awk '/^default/ { print $3 }'
    

    If you have multiple network interfaces configured simultaneously, this will print multiple gateways. If you want to select a single known network interface by name (e.g. eth1), simply search for that in addition to filtering for the ^default lines:

    /sbin/ip route |grep '^default' | awk '/eth1/ {print $3}'
    

    You can make a script that takes a single network-interface name as an argument and prints the associated gateway:

    #!/bin/bash
    if [[ $# -ne 1 ]]; then
        echo "ERROR: must specify network interface name!" >&2
        exit 1
    fi
    # The third argument of the 'default' line associated with the specified
    # network interface is the Gateway.
    # By default, awk does not set the exit-code to a nonzero status if a
    # specified search string is not found, so we must do so manually.
    /sbin/ip route | grep '^default' | awk "/$1/ {print \$3; found=1} END{exit !found}"
    

    As noted in the comments, this has the advantage of setting a sensible exit-code, which may be useful in a broader programmatic context.

    0 讨论(0)
提交回复
热议问题