Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Trying to use my subnet address in python code

I'm trying to get my ip subnet address (192.168.1.xxx) into my python code. I'm running linux/osx. How do I do this/ What is the best way to do this?

like image 1000
ocoutts Avatar asked Jul 01 '26 11:07

ocoutts


1 Answers

The easiest way to to this in my experience is to use two third party packages:

  • python-netifaces: Portable network interface information
  • python-netaddr: Pythonic manipulation of IPv4, IPv6, CIDR, EUI and MAC network addresses

So install those modules and then it's as easy as this:

import netifaces
import netaddr
import socket
from pprint import pformat

ifaces = netifaces.interfaces()
# => ['lo', 'eth0', 'eth1']

myiface = 'eth0'
addrs = netifaces.ifaddresses(myiface)
# {2: [{'addr': '192.168.1.150',
#             'broadcast': '192.168.1.255',
#             'netmask': '255.255.255.0'}],
#   10: [{'addr': 'fe80::21a:4bff:fe54:a246%eth0',
#                'netmask': 'ffff:ffff:ffff:ffff::'}],
#   17: [{'addr': '00:1a:4b:54:a2:46', 'broadcast': 'ff:ff:ff:ff:ff:ff'}]}

# Get ipv4 stuff
ipinfo = addrs[socket.AF_INET][0]
address = ipinfo['addr']
netmask = ipinfo['netmask']

# Create ip object and get 
cidr = netaddr.IPNetwork('%s/%s' % (address, netmask))
# => IPNetwork('192.168.1.150/24')
network = cidr.network
# => IPAddress('192.168.1.0')

print 'Network info for %s:' % myiface
print '--'
print 'address:', address
print 'netmask:', netmask
print '   cidr:', cidr
print 'network:', network

And this outputs:

Network info for eth0:
--
address: 192.168.1.150
netmask: 255.255.255.0
   cidr: 192.168.1.150/24
network: 192.168.1.0

This was done using Linux. With OSX the interface names are different but the method is the same.

like image 64
jathanism Avatar answered Jul 02 '26 23:07

jathanism



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!