Print Active Network Interface List in Linux using Python
I'm checking the replies of my previous code on Create network interfaces list using Python. E A Faisal suggestion to use
/proc/net/dev
is somehow seems interesting to me. Now, let's do some python code for fun before going out to lunch.Here is my code to get the same result as my previous python code to list the network interfaces:
#!/usr/bin/python
# read the file /proc/net/dev
f = open('/proc/net/dev','r')
# put the content to list
ifacelist = f.read().split('\n')
# close the file
f.close()
# remove 2 lines header
ifacelist.pop(0)
ifacelist.pop(0)
# loop to check each line
for line in ifacelist:
ifacedata = line.replace(' ','').split(':')
# check the data have 2 elements
if len(ifacedata) == 2:
# check the interface is up (Transmit/Receive data)
if int(ifacedata[1]) > 0:
# print the interface
print ifacedata[0]
Seems like it is working on my ubuntu linux (in the office ). I believe it should possibly work on other linux without any issue with that SIOCGIFCONF and ioctl. And the code is even simpler.
That's all for now... I'm going out for lunch. Happy python coding!
Comments
Thx and Enjoy
I've made a new post to answer your question here:
Python Code to Get IP Address From Interface Name
Most of the time eth1 is unplugged. It only gets used when I take my PC with me. That way, I have the luxury of using my PC as a local server with a static address at home, and can still easily plug into another network when I'm on the road.
When I ran the code in this post while I had eth0 in at home, my output looked like:
"lo
eth0"
When I ran it using the code snippet from your earlier post, I got this:
"lo
"
Interesting, huh? Note that socket.socket was producing a blank line for both eth0 and eth1 while /proc/net/dev listed only the two active interfaces.
Any idea why /proc/net/dev would show eth0 but socket.socket would not?