How to do it...

Listing 3.4 shows how to list the networking interfaces, as follows:

#!/usr/bin/env python 
# Python Network Programming Cookbook, Second Edition -- Chapter - 3 
# This program is optimized for Python 2.7.12 and Python 3.5.2. 
# It may run on any other version with/without modifications. 
 
import sys 
import socket 
import fcntl 
import struct 
import array 
 
SIOCGIFCONF = 0x8912 #from C library sockios.h 
STUCT_SIZE_32 = 32 
STUCT_SIZE_64 = 40 
PLATFORM_32_MAX_NUMBER =  2**32 
DEFAULT_INTERFACES = 8 
 
 
def list_interfaces(): 
    interfaces = [] 
    max_interfaces = DEFAULT_INTERFACES 
    is_64bits = sys.maxsize > PLATFORM_32_MAX_NUMBER 
    struct_size = STUCT_SIZE_64 if is_64bits else STUCT_SIZE_32 
    sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)  
    while True: 
        bytes = max_interfaces * struct_size 
        interface_names = array.array('B', b'' * bytes) 
        sock_info = fcntl.ioctl(  
            sock.fileno(), 
            SIOCGIFCONF, 
            struct.pack('iL', bytes, interface_names.buffer_info()[0]) 
        ) 
        outbytes = struct.unpack('iL', sock_info)[0] 
        if outbytes == bytes: 
            max_interfaces *= 2   
        else:  
            break 
    namestr = interface_names.tostring() 
    for i in range(0, outbytes, struct_size): 
        interfaces.append((namestr[i:i+16].split(b'', 1)
[0]).decode('ascii', 'ignore')) return interfaces if __name__ == '__main__': interfaces = list_interfaces() print ("This machine has %s network interfaces: %s." %(len(interfaces), interfaces))

The preceding script will list the network interfaces, as shown in the following output:

$ python 3_4_list_network_interfaces.py 
This machine has 2 network interfaces: ['lo', 'wlo1'].  
..................Content has been hidden....................

You can't read the all page of ebook, please click here login for view all page.
Reset
3.144.105.2