Hướng dẫn sử dụng module netifaces Python tìm thông tin địa chỉ IP trên OS

Đôi khi bạn thấy cực khó chịu khi không thể tìm ra cách đơn giản nhất để có được thông tin địa chỉ IP của card mạng trên OS từ Python. Nhưng đối với module netifaces bạn đã có ngay 1 cứu cánh đơn giản và hiệu quả để truy xuất thông tin địa chỉ IP và card interface trên OS. Vậy hãy cùng tìm hiểu xem module netifaces này có thể làm được gì nào ?

1. Cài đặt module netifaces

Cách 1:
– Download source module ‘netifaces‘ về cài.

Link download : https://pypi.python.org/pypi/netifaces#downloads

# tar xvzf netifaces-0.10.5.tar.gz
# cd netifaces-0.10.5
# python setup.py install

 
Cách 2:
– Cài đặt thông qua chương trình quản lý package ‘pip‘ của Python.

# pip install netifaces

2. Hướng dẫn sử dụng module netifaces

Chúng ta sẽ demo trên console của python 2.7 (nếu bạn chưa cài thì xem qua bài Hướng dẫn cài đặt Python 2.7). Đầu tiên chúng ta cần import module netifaces để sử dụng module này nhằm xác định thông tin địa chỉ IP và card interface trên hệ thống.

>>> from netifaces import *

2.1 Liệt kê các interface card trên hệ thống

Ta sử dụng method ‘interfaces()‘ của modules để liệt kê ra danh sách list chứa thông tin tên các card mạng interface.

>>> interfaces()
['lo', 'eth0', 'eth1']

 
Sau đó nếu ta cần xem chi tiết thông tin địa chỉ IP của 1 card interface ta sẽ thực hiện như dưới với method ‘ifaddress()‘.

>>> ifaddresses('eth0')
{17: [{'broadcast': 'ff:ff:ff:ff:ff:ff', 'addr': '00:0c:29:c1:7f:85'}], 2: [{'broadcast': '10.10.100.255', 'netmask': '255.255.255.0', 'addr': '10.10.100.250'}], 10: [{'netmask': 'ffff:ffff:ffff:ffff::/64', 'addr': 'fe80::20c:29ff:fec1:7f85%eth0'}]}

 
Giờ ta phân tích tí xíu output trên khi rút gọn nó lại như sau :

{ 17: [...], 2: [...], 10: [...] }

 
2: đại diện cho giá trị ‘AF_INET‘, địa chỉ ipv4 bình thường.
17: đại diện cho giá trị ‘AF_LINK‘, thông tin lớp 2 layer link.
10: đại diện cho giá trị ‘AF_INET6‘ , địa chỉ ipv6.

Nhưng mà bạn đừng quan tâm các con số, vì nó có thể thay đổi khác nhau tuỳ theo các môi trường OS khác nhau (các số trên là thể hiện trên OS Linux). Vì vậy ta chỉ cần quan tâm giá trị tên đại diện của nó thay vì giá trị số để có thể lấy thông tin địa chỉ ip,… của từng loại cụ thể.

>>> AF_INET
2

 
2.2 Xuất thông tin IP, MAC Address, Gateway

Vậy từ những chỉ dẫn phía trên chúng ta có thể truy xuất thông tin địa chỉ IP, MAC, Gateway,… trên từng ethernet cụ thể như sau.

>>> from netifaces import *
>>> interfaces()
['lo', 'eth0', 'eth1']
>>> ifaddresses('eth0').setdefault(AF_INET)
[{'broadcast': '10.10.100.255', 'netmask': '255.255.255.0', 'addr': '10.10.100.250'}]

 
– Thông tin MAC Address.

>>> ifaddresses('eth0').setdefault(AF_LINK)
[{'broadcast': 'ff:ff:ff:ff:ff:ff', 'addr': '00:0c:29:c3:7f:65'}]

 
– Thông tin IP Gateway.

>>> gateways()
{'default': {2: ('10.10.100.249', 'eth0')}, 2: [('10.10.100.249', 'eth0', True)]}
>>> gws = gateways()
>>> gws['default'][AF_INET]
('10.0.1.1', 'en0')

 
Note:
– Do giá trị trả về là 1 dictionary kiểu dữ liệu, nằm trong 1 list trả về nên để truy xuất từng phần tử cụ thể ta nên xài vòng lặp for để truy xuất các phần tử trong dictionary thuộc list.

3. Ví dụ code python

– Ví dụ code python , show thông tin địa chỉ IP liên quan đến card mạng.

from netifaces import *

def checkip_private():
    for int in interfaces():
        if int == "lo":
            pass
        else:
            for iplocal in ifaddresses(int).setdefault(AF_INET):
                print int + ' - ' + iplocal['addr']
                
def main():
    checkip_private()

if __name__ == '__main__':
    main()

 
Output :

eth0 - 10.10.13.250

 
Như vậy chúng ta hoàn tất việc tìm hiểu module netifaces để trích xuất thông tin địa chỉ IP và thông tin card mạng interface trên OS Linux rồi. Hy vọng các bạn thấy có ích.

Previous articleHướng dẫn cấu hình crontab chạy 15 phút mỗi lần trên Linux
Next article[Ebook] CCNA Routing and Switching Practice Test, 1500 questions
Bạn đang theo dõi website "https://cuongquach.com/" nơi lưu trữ những kiến thức tổng hợp và chia sẻ cá nhân về Quản Trị Hệ Thống Dịch Vụ & Mạng, được xây dựng lại dưới nền tảng kinh nghiệm của bản thân mình, Quách Chí Cường. Hy vọng bạn sẽ thích nơi này !