个人笔记

环境配置

  • Linux 环境配置
  • Windows 环境配置
  • VsCode 笔记
  • Sphinx 笔记
  • 镜像服务

文档杂项

  • 软件整理
  • 排版
  • 字体
  • awesome

构建系统

  • Gcc 笔记
  • Makefile 笔记
  • CMake 笔记
  • OpenWRT 笔记

隔离与虚拟化

  • QEMU 笔记
  • namespace
  • Docker 笔记
  • chroot 使用
  • proot

调试分析

  • 调试笔记
  • GDB 参考手册
  • 抓包笔记
  • strace 命令
  • ebpf 笔记

读书笔记

  • apue 随笔
  • Linux 设备驱动
  • 简要密码学

参考笔记

  • Linux 笔记
  • Shell
  • Netlink 解析
    • Netlink 协议格式文档
      • 基本结构
      • 消息头 (nlmsghdr)
      • 属性格式 (nlattr)
      • 消息类型
      • 协议家族
      • 错误处理
      • 示例消息
  • SSH (Secure Shell) 手册
  • 工具集
  • Git 手册
  • GitHUB 手册
  • C 语言笔记
  • RTOS 笔记
  • 时间
  • 网络
个人笔记
  • Netlink 解析
  • 查看页面源码

Netlink 解析

Netlink 协议格式文档

基本结构

Netlink 消息由消息头和消息体组成:

struct nlmsghdr {
    __u32 nlmsg_len;    /* Length of message including header */
    __u16 nlmsg_type;   /* Message content */
    __u16 nlmsg_flags;  /* Additional flags */
    __u32 nlmsg_seq;    /* Sequence number */
    __u32 nlmsg_pid;    /* Sending process port ID */
};

消息头 (nlmsghdr)

  • nlmsg_len: 整个消息长度,包括头部

  • nlmsg_type: 消息类型 (如: NLMSG_NOOP, NLMSG_ERROR, NLMSG_DONE)

  • nlmsg_flags: 控制标志 (如: NLM_F_REQUEST, NLM_F_MULTI)

  • nlmsg_seq: 序列号用于追踪消息

  • nlmsg_pid: 发送进程的端口ID

属性格式 (nlattr)

消息体通常包含多个属性:

struct nlattr {
    __u16 nla_len;      /* Length of attribute including header */
    __u16 nla_type;     /* Type of attribute */
    /* Attribute payload follows */
};

消息类型

常见消息类型:

  • RTM_NEWLINK: 创建/修改网络接口

  • RTM_DELLINK: 删除网络接口

  • RTM_GETLINK: 查询网络接口

  • RTM_NEWADDR: 添加IP地址

  • RTM_DELADDR: 删除IP地址

协议家族

  • NETLINK_ROUTE: 网络路由和接口

  • NETLINK_FIREWALL: 防火墙相关

  • NETLINK_NFLOG: Netfilter日志

  • NETLINK_GENERIC: 通用协议

错误处理

错误消息格式:

struct nlmsgerr {
    int error;         /* Negative errno or 0 for acknowledgements */
    struct nlmsghdr msg; /* Original message header */
};

示例消息

获取网络接口列表的请求示例:

struct {
    struct nlmsghdr nh;
    struct ifinfomsg ifi;
} req = {
    .nh = {
        .nlmsg_len = NLMSG_LENGTH(sizeof(struct ifinfomsg)),
        .nlmsg_type = RTM_GETLINK,
        .nlmsg_flags = NLM_F_REQUEST | NLM_F_DUMP,
        .nlmsg_seq = 1,
    },
    .ifi = {
        .ifi_family = AF_PACKET,
    },
上一页 下一页

最后更新于 2026-02-13 04:28:25.

利用 Sphinx 构建,使用的 主题 由 Read the Docs 开发.