⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 netlink.htm

📁 netlink编程
💻 HTM
📖 第 1 页 / 共 5 页
字号:

            <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>&quot;获取到设备[</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>&quot;</b></font>, pstruIF -&gt; ifi_index);
            fprintf(<font color="#ff40ff"><b>stderr</b></font>, <font color="#ff40ff"><b>&quot;</b></font><font color="#ff6060"><b>\t</b></font><font color="#ff40ff"><b>设备类型:&quot;</b></font>);
            <font color="#ffff00"><b>switch</b></font>(pstruIF -&gt; ifi_type)
            {
                <font color="#ffff00"><b>case</b></font> ARPHRD_ETHER:
                    fprintf(<font color="#ff40ff"><b>stderr</b></font>, <font color="#ff40ff"><b>&quot;以太网</b></font><font color="#ff6060"><b>\n</b></font><font color="#ff40ff"><b>&quot;</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>&quot;PPP拨号</b></font><font color="#ff6060"><b>\n</b></font><font color="#ff40ff"><b>&quot;</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>&quot;环路设备</b></font><font color="#ff6060"><b>\n</b></font><font color="#ff40ff"><b>&quot;</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>&quot;未知</b></font><font color="#ff6060"><b>\n</b></font><font color="#ff40ff"><b>&quot;</b></font>);
                    <font color="#ffff00"><b>break</b></font>;
            }
            fprintf(<font color="#ff40ff"><b>stderr</b></font>, <font color="#ff40ff"><b>&quot;</b></font><font color="#ff6060"><b>\t</b></font><font color="#ff40ff"><b>设备状态:&quot;</b></font>);
            <font color="#ffff00"><b>if</b></font>((pstruIF -&gt; ifi_flags &amp; IFF_UP )== IFF_UP)
                fprintf(<font color="#ff40ff"><b>stderr</b></font>, <font color="#ff40ff"><b>&quot; UP&quot;</b></font>);
            <font color="#ffff00"><b>if</b></font>((pstruIF -&gt; ifi_flags &amp; IFF_BROADCAST) == IFF_BROADCAST)
                fprintf(<font color="#ff40ff"><b>stderr</b></font>, <font color="#ff40ff"><b>&quot; BROADCAST&quot;</b></font>);
            <font color="#ffff00"><b>if</b></font>((pstruIF -&gt; ifi_flags &amp; IFF_DEBUG) == IFF_DEBUG)
                fprintf(<font color="#ff40ff"><b>stderr</b></font>, <font color="#ff40ff"><b>&quot; DEBUG&quot;</b></font>);
            <font color="#ffff00"><b>if</b></font>((pstruIF -&gt; ifi_flags &amp; IFF_LOOPBACK) == IFF_LOOPBACK)
                fprintf(<font color="#ff40ff"><b>stderr</b></font>, <font color="#ff40ff"><b>&quot; LOOPBACK&quot;</b></font>);
            <font color="#ffff00"><b>if</b></font>((pstruIF -&gt; ifi_flags &amp; IFF_POINTOPOINT) == IFF_POINTOPOINT)
                fprintf(<font color="#ff40ff"><b>stderr</b></font>, <font color="#ff40ff"><b>&quot; POINTOPOINT&quot;</b></font>);
            <font color="#ffff00"><b>if</b></font>((pstruIF -&gt; ifi_flags &amp; IFF_RUNNING) == IFF_RUNNING)
                fprintf(<font color="#ff40ff"><b>stderr</b></font>, <font color="#ff40ff"><b>&quot; RUNNING&quot;</b></font>);
            <font color="#ffff00"><b>if</b></font>((pstruIF -&gt; ifi_flags &amp; IFF_NOARP) == IFF_NOARP)
                fprintf(<font color="#ff40ff"><b>stderr</b></font>, <font color="#ff40ff"><b>&quot; NOARP&quot;</b></font>);
            <font color="#ffff00"><b>if</b></font>((pstruIF -&gt; ifi_flags &amp; IFF_PROMISC) == IFF_PROMISC)
                fprintf(<font color="#ff40ff"><b>stderr</b></font>, <font color="#ff40ff"><b>&quot; PROMISC&quot;</b></font>);
            <font color="#ffff00"><b>if</b></font>((pstruIF -&gt; ifi_flags &amp; IFF_NOTRAILERS) == IFF_NOTRAILERS)
                fprintf(<font color="#ff40ff"><b>stderr</b></font>, <font color="#ff40ff"><b>&quot; NOTRAILERS&quot;</b></font>);
            <font color="#ffff00"><b>if</b></font>((pstruIF -&gt; ifi_flags &amp; IFF_ALLMULTI) == IFF_ALLMULTI)
                fprintf(<font color="#ff40ff"><b>stderr</b></font>, <font color="#ff40ff"><b>&quot; ALLMULTI&quot;</b></font>);
            <font color="#ffff00"><b>if</b></font>((pstruIF -&gt; ifi_flags &amp; IFF_MASTER) == IFF_MASTER)
                fprintf(<font color="#ff40ff"><b>stderr</b></font>, <font color="#ff40ff"><b>&quot; MASTER&quot;</b></font>);
            <font color="#ffff00"><b>if</b></font>((pstruIF -&gt; ifi_flags &amp; IFF_SLAVE) == IFF_SLAVE)
                fprintf(<font color="#ff40ff"><b>stderr</b></font>, <font color="#ff40ff"><b>&quot; SLAVE&quot;</b></font>);
            <font color="#ffff00"><b>if</b></font>((pstruIF -&gt; ifi_flags &amp; IFF_MULTICAST) == IFF_MULTICAST)
                fprintf(<font color="#ff40ff"><b>stderr</b></font>, <font color="#ff40ff"><b>&quot; MULTICAST&quot;</b></font>);
            <font color="#ffff00"><b>if</b></font>((pstruIF -&gt; ifi_flags &amp; IFF_PORTSEL) == IFF_PORTSEL)
                fprintf(<font color="#ff40ff"><b>stderr</b></font>, <font color="#ff40ff"><b>&quot; SLAVE&quot;</b></font>);
            <font color="#ffff00"><b>if</b></font>((pstruIF -&gt; ifi_flags &amp; IFF_AUTOMEDIA) == IFF_AUTOMEDIA)
                fprintf(<font color="#ff40ff"><b>stderr</b></font>, <font color="#ff40ff"><b>&quot; AUTOMEDIA&quot;</b></font>);
            <font color="#ffff00"><b>if</b></font>((pstruIF -&gt; ifi_flags &amp; IFF_DYNAMIC) == IFF_DYNAMIC)
                fprintf(<font color="#ff40ff"><b>stderr</b></font>, <font color="#ff40ff"><b>&quot; DYNAMIC&quot;</b></font>);
            fprintf(<font color="#ff40ff"><b>stderr</b></font>, <font color="#ff40ff"><b>&quot;</b></font><font color="#ff6060"><b>\n</b></font><font color="#ff40ff"><b>&quot;</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-&gt;rta_type)
                {
                    <font color="#ffff00"><b>case</b></font> IFLA_IFNAME:
                        fprintf(<font color="#ff40ff"><b>stderr</b></font>, <font color="#ff40ff"><b>&quot;</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>&quot;</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>&quot;</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>&quot;</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>&quot;</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>&quot;</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 -&gt; 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>&quot;</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>&quot;</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 -&gt; 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>&quot;</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>&quot;</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>&quot;</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>&quot;</b></font>);
                        fprintf(<font color="#ff40ff"><b>stderr</b></font>, <font color="#ff40ff"><b>&quot;</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>&quot;</b></font>,
                            pstruInfo -&gt; rx_packets, pstruInfo -&gt; rx_bytes);
                        fprintf(<font color="#ff40ff"><b>stderr</b></font>, <font color="#ff40ff"><b>&quot;</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> &quot;</b></font>
                                <font color="#ff40ff"><b>&quot;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>&quot;</b></font>,
                            pstruInfo -&gt; rx_errors, pstruInfo -&gt; rx_dropped,
                            pstruInfo -&gt; multicast, pstruInfo -&gt; collisions);
                        fprintf(<font color="#ff40ff"><b>stderr</b></font>, <font color="#ff40ff"><b>&quot;</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> &quot;</b></font>
                                <font color="#ff40ff"><b>&quot;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>&quot;</b></font>,
                            pstruInfo -&gt; rx_length_errors,
                            pstruInfo -&gt; rx_over_errors,
                            pstruInfo -&gt; rx_crc_errors,
                            pstruInfo -&gt; rx_frame_errors,
                            pstruInfo -&gt; rx_fifo_errors,
                            pstruInfo -&gt; rx_missed_errors);
                        fprintf(<font color="#ff40ff"><b>stderr</b></font>, <font color="#ff40ff"><b>&quot;</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>&quot;</b></font>);
                        fprintf(<font color="#ff40ff"><b>stderr</b></font>, <font color="#ff40ff"><b>&quot;</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>&quot;</b></font>,
                            pstruInfo -&gt; tx_packets, pstruInfo -&gt; tx_bytes);
                        fprintf(<font color="#ff40ff"><b>stderr</b></font>, <font color="#ff40ff"><b>&quot;</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>&quot;</b></font>,
                            pstruInfo -&gt; tx_errors, pstruInfo -&gt; tx_dropped);
                        fprintf(<font color="#ff40ff"><b>stderr</b></font>, <font color="#ff40ff"><b>&quot;</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>&quot;</b></font>
                                <font color="#ff40ff"><b>&quot; 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>&quot;</b></font>,
                            pstruInfo -&gt; tx_aborted_errors,
                            pstruInfo -&gt; tx_carrier_errors,
                            pstruInfo -&gt; tx_fifo_errors,
                            pstruInfo -&gt; tx_heartbeat_errors,
                            pstruInfo -&gt; 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 + -