📄 netlink.htm
字号:
<font color="#00ffff"><b>/*</b></font>
<font color="#00ffff"><b> * 下面通过宏获取数据</b></font>
<font color="#00ffff"><b> </b></font><font color="#00ffff"><b>*/</b></font>
pstruIF = NLMSG_DATA(pstruNL);
fprintf(<font color="#ff40ff"><b>stderr</b></font>, <font color="#ff40ff"><b>"获取到设备[</b></font><font color="#ff6060"><b>%d</b></font><font color="#ff40ff"><b>]信息</b></font><font color="#ff6060"><b>\n</b></font><font color="#ff40ff"><b>"</b></font>, pstruIF -> ifi_index);
fprintf(<font color="#ff40ff"><b>stderr</b></font>, <font color="#ff40ff"><b>"</b></font><font color="#ff6060"><b>\t</b></font><font color="#ff40ff"><b>设备类型:"</b></font>);
<font color="#ffff00"><b>switch</b></font>(pstruIF -> ifi_type)
{
<font color="#ffff00"><b>case</b></font> ARPHRD_ETHER:
fprintf(<font color="#ff40ff"><b>stderr</b></font>, <font color="#ff40ff"><b>"以太网</b></font><font color="#ff6060"><b>\n</b></font><font color="#ff40ff"><b>"</b></font>);
<font color="#ffff00"><b>break</b></font>;
<font color="#ffff00"><b>case</b></font> ARPHRD_PPP:
fprintf(<font color="#ff40ff"><b>stderr</b></font>, <font color="#ff40ff"><b>"PPP拨号</b></font><font color="#ff6060"><b>\n</b></font><font color="#ff40ff"><b>"</b></font>);
<font color="#ffff00"><b>break</b></font>;
<font color="#ffff00"><b>case</b></font> ARPHRD_LOOPBACK:
fprintf(<font color="#ff40ff"><b>stderr</b></font>, <font color="#ff40ff"><b>"环路设备</b></font><font color="#ff6060"><b>\n</b></font><font color="#ff40ff"><b>"</b></font>);
<font color="#ffff00"><b>break</b></font>;
<font color="#ffff00"><b>default</b></font>:
fprintf(<font color="#ff40ff"><b>stderr</b></font>, <font color="#ff40ff"><b>"未知</b></font><font color="#ff6060"><b>\n</b></font><font color="#ff40ff"><b>"</b></font>);
<font color="#ffff00"><b>break</b></font>;
}
fprintf(<font color="#ff40ff"><b>stderr</b></font>, <font color="#ff40ff"><b>"</b></font><font color="#ff6060"><b>\t</b></font><font color="#ff40ff"><b>设备状态:"</b></font>);
<font color="#ffff00"><b>if</b></font>((pstruIF -> ifi_flags & IFF_UP )== IFF_UP)
fprintf(<font color="#ff40ff"><b>stderr</b></font>, <font color="#ff40ff"><b>" UP"</b></font>);
<font color="#ffff00"><b>if</b></font>((pstruIF -> ifi_flags & IFF_BROADCAST) == IFF_BROADCAST)
fprintf(<font color="#ff40ff"><b>stderr</b></font>, <font color="#ff40ff"><b>" BROADCAST"</b></font>);
<font color="#ffff00"><b>if</b></font>((pstruIF -> ifi_flags & IFF_DEBUG) == IFF_DEBUG)
fprintf(<font color="#ff40ff"><b>stderr</b></font>, <font color="#ff40ff"><b>" DEBUG"</b></font>);
<font color="#ffff00"><b>if</b></font>((pstruIF -> ifi_flags & IFF_LOOPBACK) == IFF_LOOPBACK)
fprintf(<font color="#ff40ff"><b>stderr</b></font>, <font color="#ff40ff"><b>" LOOPBACK"</b></font>);
<font color="#ffff00"><b>if</b></font>((pstruIF -> ifi_flags & IFF_POINTOPOINT) == IFF_POINTOPOINT)
fprintf(<font color="#ff40ff"><b>stderr</b></font>, <font color="#ff40ff"><b>" POINTOPOINT"</b></font>);
<font color="#ffff00"><b>if</b></font>((pstruIF -> ifi_flags & IFF_RUNNING) == IFF_RUNNING)
fprintf(<font color="#ff40ff"><b>stderr</b></font>, <font color="#ff40ff"><b>" RUNNING"</b></font>);
<font color="#ffff00"><b>if</b></font>((pstruIF -> ifi_flags & IFF_NOARP) == IFF_NOARP)
fprintf(<font color="#ff40ff"><b>stderr</b></font>, <font color="#ff40ff"><b>" NOARP"</b></font>);
<font color="#ffff00"><b>if</b></font>((pstruIF -> ifi_flags & IFF_PROMISC) == IFF_PROMISC)
fprintf(<font color="#ff40ff"><b>stderr</b></font>, <font color="#ff40ff"><b>" PROMISC"</b></font>);
<font color="#ffff00"><b>if</b></font>((pstruIF -> ifi_flags & IFF_NOTRAILERS) == IFF_NOTRAILERS)
fprintf(<font color="#ff40ff"><b>stderr</b></font>, <font color="#ff40ff"><b>" NOTRAILERS"</b></font>);
<font color="#ffff00"><b>if</b></font>((pstruIF -> ifi_flags & IFF_ALLMULTI) == IFF_ALLMULTI)
fprintf(<font color="#ff40ff"><b>stderr</b></font>, <font color="#ff40ff"><b>" ALLMULTI"</b></font>);
<font color="#ffff00"><b>if</b></font>((pstruIF -> ifi_flags & IFF_MASTER) == IFF_MASTER)
fprintf(<font color="#ff40ff"><b>stderr</b></font>, <font color="#ff40ff"><b>" MASTER"</b></font>);
<font color="#ffff00"><b>if</b></font>((pstruIF -> ifi_flags & IFF_SLAVE) == IFF_SLAVE)
fprintf(<font color="#ff40ff"><b>stderr</b></font>, <font color="#ff40ff"><b>" SLAVE"</b></font>);
<font color="#ffff00"><b>if</b></font>((pstruIF -> ifi_flags & IFF_MULTICAST) == IFF_MULTICAST)
fprintf(<font color="#ff40ff"><b>stderr</b></font>, <font color="#ff40ff"><b>" MULTICAST"</b></font>);
<font color="#ffff00"><b>if</b></font>((pstruIF -> ifi_flags & IFF_PORTSEL) == IFF_PORTSEL)
fprintf(<font color="#ff40ff"><b>stderr</b></font>, <font color="#ff40ff"><b>" SLAVE"</b></font>);
<font color="#ffff00"><b>if</b></font>((pstruIF -> ifi_flags & IFF_AUTOMEDIA) == IFF_AUTOMEDIA)
fprintf(<font color="#ff40ff"><b>stderr</b></font>, <font color="#ff40ff"><b>" AUTOMEDIA"</b></font>);
<font color="#ffff00"><b>if</b></font>((pstruIF -> ifi_flags & IFF_DYNAMIC) == IFF_DYNAMIC)
fprintf(<font color="#ff40ff"><b>stderr</b></font>, <font color="#ff40ff"><b>" DYNAMIC"</b></font>);
fprintf(<font color="#ff40ff"><b>stderr</b></font>, <font color="#ff40ff"><b>"</b></font><font color="#ff6060"><b>\n</b></font><font color="#ff40ff"><b>"</b></font>);
<font color="#00ffff"><b>/*</b></font>
<font color="#00ffff"><b> * 下面通过宏获取属性</b></font>
<font color="#00ffff"><b> </b></font><font color="#00ffff"><b>*/</b></font>
pstruAttr = IFLA_RTA(pstruIF);
nAttrLen = NLMSG_PAYLOAD(pstruNL, <font color="#ffff00"><b>sizeof</b></font>(<font color="#00ff00"><b>struct</b></font> ifinfomsg));
<font color="#ffff00"><b>while</b></font>(RTA_OK(pstruAttr, nAttrLen))
{
<font color="#ffff00"><b>switch</b></font>(pstruAttr->rta_type)
{
<font color="#ffff00"><b>case</b></font> IFLA_IFNAME:
fprintf(<font color="#ff40ff"><b>stderr</b></font>, <font color="#ff40ff"><b>"</b></font><font color="#ff6060"><b>\t</b></font><font color="#ff40ff"><b>设备名称:</b></font><font color="#ff6060"><b>%s</b></font><font color="#ff6060"><b>\n</b></font><font color="#ff40ff"><b>"</b></font>,
(<font color="#00ff00"><b>char</b></font> *)RTA_DATA(pstruAttr));
<font color="#ffff00"><b>break</b></font>;
<font color="#ffff00"><b>case</b></font> IFLA_MTU:
fprintf(<font color="#ff40ff"><b>stderr</b></font>, <font color="#ff40ff"><b>"</b></font><font color="#ff6060"><b>\t</b></font><font color="#ff40ff"><b>设备MTU:</b></font><font color="#ff6060"><b>%d</b></font><font color="#ff6060"><b>\n</b></font><font color="#ff40ff"><b>"</b></font>,
*(<font color="#00ff00"><b>unsigned</b></font> <font color="#00ff00"><b>int</b></font> *)RTA_DATA(pstruAttr));
<font color="#ffff00"><b>break</b></font>;
<font color="#ffff00"><b>case</b></font> IFLA_QDISC:
fprintf(<font color="#ff40ff"><b>stderr</b></font>, <font color="#ff40ff"><b>"</b></font><font color="#ff6060"><b>\t</b></font><font color="#ff40ff"><b>设备队列:</b></font><font color="#ff6060"><b>%s</b></font><font color="#ff6060"><b>\n</b></font><font color="#ff40ff"><b>"</b></font>,
(<font color="#00ff00"><b>char</b></font> *)RTA_DATA(pstruAttr));
<font color="#ffff00"><b>break</b></font>;
<font color="#ffff00"><b>case</b></font> IFLA_ADDRESS:
<font color="#ffff00"><b>if</b></font>(pstruIF -> ifi_type == ARPHRD_ETHER)
{
pstruEther = (<font color="#00ff00"><b>struct</b></font> ether_addr *)
RTA_DATA(pstruAttr);
fprintf(<font color="#ff40ff"><b>stderr</b></font>, <font color="#ff40ff"><b>"</b></font><font color="#ff6060"><b>\t</b></font><font color="#ff40ff"><b>MAC地址:</b></font><font color="#ff6060"><b>%s</b></font><font color="#ff6060"><b>\n</b></font><font color="#ff40ff"><b>"</b></font>,
ether_ntoa(pstruEther));
}
<font color="#ffff00"><b>break</b></font>;
<font color="#ffff00"><b>case</b></font> IFLA_BROADCAST:
<font color="#ffff00"><b>if</b></font>(pstruIF -> ifi_type == ARPHRD_ETHER)
{
pstruEther = (<font color="#00ff00"><b>struct</b></font> ether_addr *)
RTA_DATA(pstruAttr);
fprintf(<font color="#ff40ff"><b>stderr</b></font>, <font color="#ff40ff"><b>"</b></font><font color="#ff6060"><b>\t</b></font><font color="#ff40ff"><b>广播MAC地址:</b></font><font color="#ff6060"><b>%s</b></font><font color="#ff6060"><b>\n</b></font><font color="#ff40ff"><b>"</b></font>,
ether_ntoa(pstruEther));
}
<font color="#ffff00"><b>break</b></font>;
<font color="#ffff00"><b>case</b></font> IFLA_STATS:
pstruInfo = (<font color="#00ff00"><b>struct</b></font> net_device_stats *)
RTA_DATA(pstruAttr);
fprintf(<font color="#ff40ff"><b>stderr</b></font>, <font color="#ff40ff"><b>"</b></font><font color="#ff6060"><b>\t</b></font><font color="#ff40ff"><b>接收信息:</b></font><font color="#ff6060"><b>\n</b></font><font color="#ff40ff"><b>"</b></font>);
fprintf(<font color="#ff40ff"><b>stderr</b></font>, <font color="#ff40ff"><b>"</b></font><font color="#ff6060"><b>\t\t</b></font><font color="#ff40ff"><b>接收报文:</b></font><font color="#ff6060"><b>%lu</b></font><font color="#ff40ff"><b> 字节:</b></font><font color="#ff6060"><b>%lu</b></font><font color="#ff6060"><b>\n</b></font><font color="#ff40ff"><b>"</b></font>,
pstruInfo -> rx_packets, pstruInfo -> rx_bytes);
fprintf(<font color="#ff40ff"><b>stderr</b></font>, <font color="#ff40ff"><b>"</b></font><font color="#ff6060"><b>\t\t</b></font><font color="#ff40ff"><b>errors:</b></font><font color="#ff6060"><b>%lu</b></font><font color="#ff40ff"><b> dropped:</b></font><font color="#ff6060"><b>%lu</b></font><font color="#ff40ff"><b> "</b></font>
<font color="#ff40ff"><b>"multicast:</b></font><font color="#ff6060"><b>%lu</b></font><font color="#ff40ff"><b> collisions:</b></font><font color="#ff6060"><b>%lu</b></font><font color="#ff6060"><b>\n</b></font><font color="#ff40ff"><b>"</b></font>,
pstruInfo -> rx_errors, pstruInfo -> rx_dropped,
pstruInfo -> multicast, pstruInfo -> collisions);
fprintf(<font color="#ff40ff"><b>stderr</b></font>, <font color="#ff40ff"><b>"</b></font><font color="#ff6060"><b>\t\t</b></font><font color="#ff40ff"><b>length:</b></font><font color="#ff6060"><b>%lu</b></font><font color="#ff40ff"><b> over:</b></font><font color="#ff6060"><b>%lu</b></font><font color="#ff40ff"><b> crc:</b></font><font color="#ff6060"><b>%lu</b></font><font color="#ff40ff"><b> "</b></font>
<font color="#ff40ff"><b>"frame:</b></font><font color="#ff6060"><b>%lu</b></font><font color="#ff40ff"><b> fifo:</b></font><font color="#ff6060"><b>%lu</b></font><font color="#ff40ff"><b> missed:</b></font><font color="#ff6060"><b>%lu</b></font><font color="#ff6060"><b>\n</b></font><font color="#ff40ff"><b>"</b></font>,
pstruInfo -> rx_length_errors,
pstruInfo -> rx_over_errors,
pstruInfo -> rx_crc_errors,
pstruInfo -> rx_frame_errors,
pstruInfo -> rx_fifo_errors,
pstruInfo -> rx_missed_errors);
fprintf(<font color="#ff40ff"><b>stderr</b></font>, <font color="#ff40ff"><b>"</b></font><font color="#ff6060"><b>\t</b></font><font color="#ff40ff"><b>发送信息:</b></font><font color="#ff6060"><b>\n</b></font><font color="#ff40ff"><b>"</b></font>);
fprintf(<font color="#ff40ff"><b>stderr</b></font>, <font color="#ff40ff"><b>"</b></font><font color="#ff6060"><b>\t\t</b></font><font color="#ff40ff"><b>发送报文:</b></font><font color="#ff6060"><b>%lu</b></font><font color="#ff40ff"><b> 字节:</b></font><font color="#ff6060"><b>%lu</b></font><font color="#ff6060"><b>\n</b></font><font color="#ff40ff"><b>"</b></font>,
pstruInfo -> tx_packets, pstruInfo -> tx_bytes);
fprintf(<font color="#ff40ff"><b>stderr</b></font>, <font color="#ff40ff"><b>"</b></font><font color="#ff6060"><b>\t\t</b></font><font color="#ff40ff"><b>errors:</b></font><font color="#ff6060"><b>%lu</b></font><font color="#ff40ff"><b> dropped:</b></font><font color="#ff6060"><b>%lu</b></font><font color="#ff6060"><b>\n</b></font><font color="#ff40ff"><b>"</b></font>,
pstruInfo -> tx_errors, pstruInfo -> tx_dropped);
fprintf(<font color="#ff40ff"><b>stderr</b></font>, <font color="#ff40ff"><b>"</b></font><font color="#ff6060"><b>\t\t</b></font><font color="#ff40ff"><b>aborted:</b></font><font color="#ff6060"><b>%lu</b></font><font color="#ff40ff"><b> carrier:</b></font><font color="#ff6060"><b>%lu</b></font><font color="#ff40ff"><b> fifo:</b></font><font color="#ff6060"><b>%lu</b></font><font color="#ff40ff"><b>"</b></font>
<font color="#ff40ff"><b>" heartbeat:</b></font><font color="#ff6060"><b>%lu</b></font><font color="#ff40ff"><b> window:</b></font><font color="#ff6060"><b>%lu</b></font><font color="#ff6060"><b>\n</b></font><font color="#ff40ff"><b>"</b></font>,
pstruInfo -> tx_aborted_errors,
pstruInfo -> tx_carrier_errors,
pstruInfo -> tx_fifo_errors,
pstruInfo -> tx_heartbeat_errors,
pstruInfo -> tx_window_errors);
<font color="#ffff00"><b>break</b></font>;
<font color="#ffff00"><b>default</b></font>:
<font color="#ffff00"><b>break</b></font>;
}
<font color="#00ffff"><b>/*</b></font>
<font color="#00ffff"><b> * 继续下一个属性</b></font>
<font color="#00ffff"><b> </b></font><font color="#00ffff"><b>*/</b></font>
pstruAttr = RTA_NEXT(pstruAttr, nAttrLen);
}
<font color="#00ffff"><b>/*</b></font>
<font color="#00ffff"><b> * 继续下一个数据</b></font>
<font color="#00ffff"><b> </b></font><font color="#00ffff"><b>*/</b></font>
pstruNL = NLMSG_NEXT(pstruNL, nLen);
}
memset(szBuffer, <font color="#ff40ff"><b>0</b></font>, <font color="#ffff00"><b>sizeof</b></font>(szBuffer));
alarm(<font color="#ff40ff"><b>30</b></font>);
}
<font color="#ffff00"><b>return</b></font> <font color="#ff40ff"><b>0</b></font>;
}
</pre>下面是我的机器的输出信息
<pre>
获取到设备[1]信息
设备类型:环路设备
设备状态: UP LOOPBACK RUNNING
设备名称:lo
设备MTU:16436
设备队列:noqueue
接收信息:
接收报文:73 字节:5105
errors:0 dropped:0 multicast:0 collisions:0
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -