linux - 如何在 Linux 内核源代码中打印 IP 地址或 MAC 地址

标签 linux tcp kernel

我必须通过修改 Linux 内核源代码来稍微更改 TCP 拥塞控制算法。但是要检查结果是否正确,我需要记录 MAC 或 IP 地址的信息。

我使用 PRINTK 函数为内核打印消息。但是我觉得很难打印出主机的 MAC/IP 地址。

printk("%pM \n", mac)

但是mac指的是什么? 在 TCP 源代码中,我经常使用 skbuff 或 sock 结构。

谢谢。

更新:

struct iphdr *iph = ip_hdr(skb);
printk(KERN_DEBUG "%pI4", iph->saddr);

最佳答案

Linux 在文件 Documentation/printk-formats.txt 中记录了 printk 格式说明符扩展,作为内核源代码的一部分。对于您的示例,

IPv4 addresses:

        %pI4    1.2.3.4
        %pi4    001.002.003.004
        %p[Ii][hnbl]

        For printing IPv4 dot-separated decimal addresses. The 'I4' and 'i4'
        specifiers result in a printed address with ('i4') or without ('I4')
        leading zeros.

传递的参数将是指向要打印的 IP 地址的指针(skbuff、套接字结构等)。

关于linux - 如何在 Linux 内核源代码中打印 IP 地址或 MAC 地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23584913/

相关文章:

c++ - cpp socket - TCP 传输(使用相同的端口发送和接收)

c - 获取当前运行程序在内核中的绝对路径

linux - CygWin 下 Shell 脚本循环内存不足

c - 为什么非阻塞写入磁盘不返回 EAGAIN 或 EWOULDBLOCK?

linux - 如何使用 bash 脚本中的变量在谷歌浏览器中运行 url

java - 如何从 Android Tcp 客户端套接字连接到具有公共(public) IP 的 Java TCP 服务器套接字?

c - 通过 TCP 发送的文件创建类型为 : application/octet-stream

windows - 无法使用选项上的 bcdedit/debug 启动 Windows 7(32 位)

c - 查看可执行二进制文件的链接器 'uses' 的确切内存范围

linux - 如何使用 GhostScript 避免标题截断 tiff。选择 于 tiff