个人笔记

环境配置

  • 开发环境
  • 补充文档

隔离与虚拟化

  • 虚拟化与隔离

调试分析

  • 调试笔记
  • 抓包笔记

构建笔记

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

读书笔记

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

参考笔记

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

文档构建

  • todo 清单
  • tags 清单
个人笔记
  • 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,
    },
上一页 下一页

最后更新于 2025-06-25 03:16:01.

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