Bash- Determine what interface is online


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Bash- Determine what interface is online
# 1  
Old 09-12-2013
Bash- Determine what interface is online

Hey guys, I want to use a a quick bash script/command to determine what network interface is connected to the internet so I can pipe it out to become a variable, in order so the user does not have to manually type it in each time or have to 'hardcode' the variable into the script.

I know about checking ifconfig etc of course, just looking for another way.

Many thanks and apologies for the kinda double post!
# 2  
Old 09-12-2013
For LINUX, if you don't have to know the IP addresses of the interfaces, but just to enquire the status, mii-tool / ethtool also work. These commands might require root privilege to execute.
# 3  
Old 09-12-2013
Code:
ip route get 8.8.8.8
8.8.8.8 via 192.168.10.1 dev eth0  src 192.168.10.33
    cache

This tests what route is used to connect to a public IP, like this Google DNS IP

gawk version (rs limitation)
Code:
ip route get 8.8.8.8 | awk 'NR==2 {print $1}' RS="dev"
eth0

You need to find the word after dev, and this can vary on the line, depending if computer is behind a firewall/router, or connected directly on the net.

EDIT: a more portable version
Code:
ip route get 8.8.8.8 | awk -F"dev " 'NR==1 {split($2,a," ");print a[1]}'

# 4  
Old 09-12-2013
Which interface is connected to the internet is a routing thing:

Code:
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
172.16.0.2      0.0.0.0         255.255.255.255 UH    0      0        0 tun0
192.168.0.0     0.0.0.0         255.255.255.0   U     0      0        0 lan
172.16.0.0      172.16.0.2      255.255.0.0     UG    0      0        0 tun0
127.0.0.0       0.0.0.0         255.0.0.0       U     0      0        0 lo
0.0.0.0         192.168.0.1     0.0.0.0         UG    0      0        0 lan

So, to always grab the catch-all default gateway:

Code:
$ /sbin/route -n | awk '/0\.0\.0\.0/ && /UG/ { print $NF ; exit }'

lan

$

# 5  
Old 09-12-2013
This does not work on my VPS server.
It gives:
Code:
route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         0.0.0.0         0.0.0.0         U     0      0        0 venet0

This works fine
Code:
ip route get 8.8.8.8
8.8.8.8 dev venet0  src 32.244.0.10
    cache  ipid 0x2868 mtu 1500 advmss 1460 hoplimit 64

ip route get 8.8.8.8 | awk -F"dev " 'NR==1 {split($2,a," ");print a[1]}'
venet0

# 6  
Old 09-12-2013
A default route can work without UG? Must be bridged... That makes my program even simpler though!

Code:
$ /sbin/route -n | awk '($1 == "0.0.0.0") { print $NF ; exit }'

lan

$

# 7  
Old 09-12-2013
Spot on, problem solved, cheers guys.
Login or Register to Ask a Question

Previous Thread | Next Thread

8 More Discussions You Might Find Interesting

1. Solaris

Determine PCI Endpoint for a Serial Interface.

Hi Folks, Here is one for the real Solaris aficionados on the site; I have a T5240 and have to create an I/O domain with access to the serial port, in this case /dev/term/a and although I have been through the documentation I'm having some issues in identifying the device to assign. What I... (2 Replies)
Discussion started by: gull04
2 Replies

2. Shell Programming and Scripting

How to define a variable in a BASH script by using a JSON file online?

Hello, I would like to modify an existing script of mine that uses a manually defined "MCVERSION" variable and make it define that variable instead based on this JSON file stored online: https://s3.amazonaws.com/Minecraft.Download/versions/versions.json Within that JSON, I 'm looking for... (4 Replies)
Discussion started by: nbsparks
4 Replies

3. SCO

Change SCO - GUI or Desktop interface to DOS based interface

Hi all I have installed a demo version of SCO OpenServer 5.0.2, I finally found it is Desktop Interface, I would like to know how to change its interface to dos based interface? If you have any ideas, please tell me then. Thank you (2 Replies)
Discussion started by: TinhNhi
2 Replies

4. HP-UX

How to determine network interface that will be used to send a packet for an IP

Hello, I'm writing to you because I encountered the following problem. My program displayes all network interfaces that are available in the system, but I would like to add a functionality in which a user can enter a destination address IP (ex. the IP address of the Google search engine) and will... (1 Reply)
Discussion started by: foxrafi
1 Replies

5. Solaris

Determine Solaris box network interface?

Given a new Solaris box, with a fresh, unconfigured install on it, how does one figure out what kind of network interface it has (bge,le, hme, etc)? (8 Replies)
Discussion started by: akbar
8 Replies

6. UNIX for Advanced & Expert Users

command for CPU online/offline status in bash shell

Hi , How do i check that the CPU is online/offline in a multi CPU machine in Linux ? i tired /proc/cpuinfo dmesg nothing gave me the currect CPU status. Pls help !! (5 Replies)
Discussion started by: sars
5 Replies

7. IP Networking

How to determine the interface?

Given the interfaces on a firewall: eth0 Link encap:Ethernet HWaddr 02:40:67:34:F5:47 inet addr:192.168.0.1 Bcast:192.168.0.255 Mask:255.255.255.0 eth1 Link encap:Ethernet HWaddr 86:23:98:45:35:56 inet addr:123.45.240.69 Bcast:255.255.255.255 ... (2 Replies)
Discussion started by: kikikaka
2 Replies

8. Programming

determine if a ethernet interface is up

Howto check if a ethernet interface is up? It's impossible to determine via the ipaddress i have learned, or? Can someone please give me a hint on howto do? Environment == Linux x86 GNU GCC. :D regards Esaia (2 Replies)
Discussion started by: Esaia
2 Replies
Login or Register to Ask a Question