Skip to main content

A port of libnl, a collection of libraries providing APIs to the Netlink protocol based Linux kernel interfaces. This library is API-equivalent to the original C library, and should make it relatively easy to convert C programs into pure Python without having to call external binaries.

As Netlink is a Linux-specific protocol, this library will only work on Linux hosts. All communication is done using sockets between the Python process and the Linux kernel. The main driver for porting libnl was to use nl80211 in Python to scan for wireless access points natively, without having to run an external program and parse its output.

  • Python 2.6, 2.7, PyPy, PyPy3, 3.3, and 3.4 supported on Linux

WiFi

Linux

Coverage

Latest

Downloads

Build Status WiFi

Build Status

Coverage Status

Latest Version

Downloads

Quickstart

Install:

pip install libnl

Example Implementations

A simple Python program that merely lists network adapters on the host:

import ctypes
import socket

from libnl.error import errmsg
from libnl.handlers import NL_CB_CUSTOM, NL_CB_VALID, NL_OK
from libnl.linux_private.if_link import IFLA_IFNAME, IFLA_RTA
from libnl.linux_private.netlink import NETLINK_ROUTE, NLMSG_LENGTH, NLM_F_DUMP, NLM_F_REQUEST
from libnl.linux_private.rtnetlink import RTA_DATA, RTA_NEXT, RTA_OK, RTM_GETLINK, ifinfomsg, rtgenmsg
from libnl.misc import get_string
from libnl.msg import nlmsg_data, nlmsg_hdr
from libnl.nl import nl_connect, nl_recvmsgs_default, nl_send_simple
from libnl.socket_ import nl_socket_alloc, nl_socket_modify_cb


def callback(msg, _):
    nlh = nlmsg_hdr(msg)
    iface = ifinfomsg(nlmsg_data(nlh))
    hdr = IFLA_RTA(iface)
    remaining = ctypes.c_int(nlh.nlmsg_len - NLMSG_LENGTH(iface.SIZEOF))
    while RTA_OK(hdr, remaining):
        if hdr.rta_type == IFLA_IFNAME:
            print('Found interface {0}: {1}'.format(iface.ifi_index, get_string(RTA_DATA(hdr)).decode('ascii')))
        hdr = RTA_NEXT(hdr, remaining)
    return NL_OK


sk = nl_socket_alloc()  # Creates an nl_sock instance.
ret = nl_connect(sk, NETLINK_ROUTE)  # Create file descriptor and bind socket.
if ret < 0:
    raise RuntimeError('nl_connect() returned {0} ({1})'.format(ret, errmsg[abs(ret)]))
rt_hdr = rtgenmsg(rtgen_family=socket.AF_PACKET)
ret = nl_send_simple(sk, RTM_GETLINK, NLM_F_REQUEST | NLM_F_DUMP, rt_hdr, rt_hdr.SIZEOF)
if ret < 0:
    raise RuntimeError('nl_send_simple() returned {0} ({1})'.format(ret, errmsg[abs(ret)]))
nl_socket_modify_cb(sk, NL_CB_VALID, NL_CB_CUSTOM, callback, None)  # Add callback to the nl_sock instance.
ret = nl_recvmsgs_default(sk)  # Get kernel's answer, and call attached callbacks.
if ret < 0:
    raise RuntimeError('nl_recvmsgs_default() returned {0} ({1})'.format(ret, errmsg[abs(ret)]))

Here are some more examples with their C equivalents in order from “easy” to “hard”:

Changelog

This project adheres to Semantic Versioning.

0.2.0 - 2015-03-26

Added
  • Python2.6, PyPy, and PyPy3 support.

0.1.1 - 2015-03-15

  • Initial release.

Release files for libnl 0.2.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for libnl 0.2.0
File Size Uploaded
libnl-0.2.0.tar.gz 63.1 kB Details

Release files / libnl-0.2.0.tar.gz

Download URL libnl-0.2.0.tar.gz
Size 63.1 kB
Tags Source
SHA-256 checksum
How to use checksums
4afc211b90dea144c9b9fa18df5a314c729571bc26e7450ef9adf26e15c23f75
BLAKE2b-256 checksum
How to use checksums
032bb1338cb872a0bc608c1406b342cc4f63910d2549af9832118e9e79575c2b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No

Release history Release notifications | RSS feed

This release

0.2.0 This release

1 release file

0.1.1

1 release file

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page