netlink(如何用netlink接口读取内核路由表)

本文目录
- 如何用netlink接口读取内核路由表
- netlink htb-3100a/b-20k上的指示灯代表什么
- 吉利gnetlink领克能用吗
- netlink光纤收发器的简介
- broadcom netlink(tm) gigabit ethernet 是无线网卡还是一般的网卡
- netlink光纤收发器是什么作用啊、
- netlink是什么意思呀
- 吉利gnetlink怎么关联车辆教程
- netlink光纤收发器的使用范围
如何用netlink接口读取内核路由表
获取内核路由表以及操作内核路由表有几种方法:读proc 或者用ioctl(sock_fd, SIOCADDRT, &rt),这里的第二个参数是设置路由表,读也有相应的参数,还有第三种方法就是用netlink接口对内核路由表进行读取、增加、删除操作
如linaxing(牛牛)所说,以前是用IOCTL,不过那个读出的和netlink的有点差别,是信息量有差别.具体我也说不清楚,可查看相关maillist,那个牛人也就说了一句话
下面给出偶自己读内核路由表的一个程序,仿照zebra的用法
不过,最后读出的内容有点问题,好像还得转换一下,实在写不动了,欢迎批评!
#include 《stdio.h》
#include 《string.h》
#include 《asm/types.h》
#include 《sys/socket.h》
#include 《linux/netlink.h》
#include 《linux/rtnetlink.h》
//#include 《sys/types.h》
//#include 《linux/uio.h》
#include 《errno.h》
#ifdef SEQ
struct rtnl_handle
{
unsigned int seq;
}
#endif
static void parse_rtattr(struct rtattr **tb, int max,
struct rtattr *rta, int len)
{
while(RTA_OK(rta, len))
{
if(rta-》 rta_type 《= max)
tb[rta-》 rta_type] = rta;
rta = RTA_NEXT(rta, len);
}
}
int routeprint( struct sockaddr_nl *snl, struct nlmsghdr *h2)
{
#if 1
struct rtmsg *rtm;
struct rtattr *tb[RTA_MAX + 1];
int len;
int index;
int table;
void* dest;
void* gate;
char dest2;
rtm = NLMSG_DATA(h2);//get the data portion of “h2 “
index = 0;
dest = NULL;
gate = NULL;
table = rtm-》 rtm_table;
len = h2-》 nlmsg_len - NLMSG_LENGTH(sizeof(struct rtmsg));
memset(tb, 0, sizeof tb);
parse_rtattr(tb, RTA_MAX, RTM_RTA(rtm), len);
if(tb[RTA_OIF])
index = *(int *)RTA_DATA(tb[RTA_OIF]);
if(tb[RTA_DST]){
dest = RTA_DATA(tb[RTA_DST]);
// printf( “debug dest\n “);
}
else dest = 0;
#if 1
if(tb[RTA_METRICS]){
gate = RTA_DATA(tb[RTA_METRICS]);
}
#else
if(tb[RTA_GATEWAY]){
gate = RTA_DATA(tb[RTA_GATEWAY]);
//iprintf( “debug gate\n “);
}
#endif
printf( “family:%d\t “,rtm-》 rtm_family);
printf( “index: %d\t “, index);
// memcpy(dest2, dest, 4);
printf( “dest: %d\t “, dest);
// printf( “dest: %c\t “, dest2);
// printf( “dest: %c\t “, dest2);
// printf( “dest: %c\t “, dest2);
printf( “gate: %d\n “, gate);
#endif
return 1;
}
#ifdef SEQ
int getroute(int sockfd,struct rtnl_handle *rtnl)
#else
int getroute(int sockfd)
#endif
{
int i;
int status, sendsize;
unsigned char buf;
struct iovec iov = {(void*)buf, sizeof(buf)};
struct sockaddr_nl nladdr;
struct nlmsghdr *h;
struct
{
struct nlmsghdr nlh;
struct rtgenmsg g;
}req;
struct msghdr msg = { (void*)&nladdr, sizeof(nladdr),
&iov, 1, NULL, 0, 0};
nladdr.nl_family = AF_NETLINK;
req.nlh.nlmsg_len = sizeof(req);
req.nlh.nlmsg_type = RTM_GETROUTE; //增加或删除内核路由表相应改成RTM_ADDROUTE和RTM_DELROUTE
req.nlh.nlmsg_flags = NLM_F_ROOT|NLM_F_MATCH|NLM_F_REQUEST;
req.nlh.nlmsg_pid = 0;
#ifdef SEQ
req.nlh.nlmsg_seq = ++rtnl-》 seq;//may be 0?
#else
//int i;
//if (i 》 4096) i = 1;
req.nlh.nlmsg_seq = 1;
#endif
req.g.rtgen_family = AF_INET;
printf( “sockfd: %d\n “, sockfd);
if((sendsize=sendto(sockfd, (void*)&req, sizeof(req), 0,
(struct sockaddr*)&nladdr, sizeof(nladdr))) 《 0){
perror( “sendto “);
return -1;
}
printf( “sendsize= %d\n “,sendsize);
if((status=recvmsg(sockfd, &msg, 0)) 《 0){
perror( “recvmsg “);
return -1;
}
printf( “status= %d\n “,status);
#if 1 //segmentation fault
for(h = (struct nlmsghdr*)buf; NLMSG_OK(h, status);
h = NLMSG_NEXT(h, status))
{
if(h-》 nlmsg_type == NLMSG_DONE)
{
printf( “finish reading\n “);
return 1;
}
if(h-》 nlmsg_type == NLMSG_ERROR)
{
printf( “h:nlmsg ERROR “);
return 1;
}
routeprint(&nladdr, h);
}
#endif
// printf( “Can ’t convert ’h ’\n “);
// routeprint(h);
return 1;
}
int main()
{
int sockfd;
#ifdef SEQ
struct rtnl_handle rth;
#endif
struct sockaddr_nl nladdr;
if((sockfd = socket(AF_NETLINK, SOCK_RAW,
NETLINK_ROUTE)) 《0){
perror( “netlink socket “);
return -1;
}
nladdr.nl_family = AF_NETLINK;
nladdr.nl_pad = 0;
nladdr.nl_pid = 0;
nladdr.nl_groups = RTMGRP_LINK|RTMGRP_IPV4_ROUTE|
RTMGRP_IPV4_IFADDR;
if(bind(sockfd, (struct sockaddr*)&nladdr,
sizeof(nladdr)) 《 0){
perror( “bind “);
close(sockfd);
return -1;
}
#ifdef SEQ
if(getroute(sockfd, &rth) 《 0){
#else
if(getroute(sockfd) 《 0){
#endif
perror( “can ’t get route\n “);
return -1;
}
return 1;
}
netlink htb-3100a/b-20k上的指示灯代表什么
netlink htb-3100a/b-20k上的指示灯代表的是检测你网络总体情况。
1、PWR:电源指示灯,灯亮表示有电。
2、FX:光口链接/状态。
3、LINK/ACT:光口链接/状态。
4、TX-1000:电口信号指示灯,灯亮表示1000M信号。灯灭表示100M信号。
5、LINK/ACT:电链接/状态指示灯,灯亮表示接通。
Netlink套接字是用以实现用户进程与内核进程通信的一种特殊的进程间通信(IPC) ,也是网络应用程序与内核通信的最常用的接口。
吉利gnetlink领克能用吗
两者是可以共用的。
首先打开USB调试模式,开发者选项打开,里面usb调试,usb安装要打开,然后用手机连接线插入扶箱内的USB接口,我插后面不好使,建议里面,里面的肯定好使。
前提:手机要支持MHL,然后手机要在帝豪gnetlink支持的手机型号内才行,有的手机不支持,总是显示准备连接。苹果和三星的支持不错。
netlink光纤收发器的简介
是一种将短距离的双绞线电信号和长距离的光信号进行互换的以太网传输媒体转换单元,在很多地方也被称之为光电转换器(Fiber Converter)。产品一般应用在以太网电缆无法覆盖、必须使用光纤来延长传输距离的实际网络环境中,且通常定位于宽带城域网的接入层应用;同时在帮助把光纤最后一公里线路连接到城域网和更外层的网络上也发挥了巨大的作用。
broadcom netlink(tm) gigabit ethernet 是无线网卡还是一般的网卡
broadcom netlink(tm) gigabit ethernet是电脑的以太网网卡名称,也就是一般所说的有线网卡。
网卡上面装有处理器和存储器(包括RAM和ROM)。网卡和局域网之间的通信是通过电缆或双绞线以串行传输方式进行的。
而网卡和计算机之间的通信则是通过计算机主板上的I/O总线以并行传输方式进行。因此,网卡的一个重要功能就是要进行串行/并行转换。由于网络上的数据率和计算机总线上的数据率并不相同,因此在网卡中必须装有对数据进行缓存的存储芯片。
扩展资料:
无线网卡的作用、功能跟普通电脑网卡一样,是用来连接到局域网上的。它只是一个信号收发的设备,只有在找到上互联网的出口时才能实现与互联网的连接,所有无线网卡只能局限在已布有无线局域网的范围内。
无线网卡就是不通过有线连接,采用无线信号进行连接的网卡。而主流应用的无线网络分为GPRS手机无线网络上网和无线局域网两种方式。
利用微波射频技术,终端不需要线缆连接即可互相连接,进行数据传输。在OSI模型里,无线网卡工作在物理层和数据链路层。
netlink光纤收发器是什么作用啊、
恩,有些 叫它 光猫
以太网信号转为光信号,通过光纤传输,再由光信号转为以太网信号
这些转换,就是由光纤收发器来完成
祝你顺利
netlink是什么意思呀
是光纤收发器品牌名称, 英文名称是netlink 中文是 莱特林克。 在中国和台湾都有注册了商标认证,电信级有入网许可的品牌,是北京金泰联创所有权。
吉利gnetlink怎么关联车辆教程
一、gnetlink关联车辆步骤方法:
1、下载安装手机G-Netlink.apk程序;
2、启动手机中G-Netlink程序,并设置后台运行权限;
3、手机连接G-Netlink蓝牙,连接成功后即可关联成功,当然也可以用数据线连接;
二、gnetlink关联车辆失败:
1、联系店内销售人员,确认该车型是否有gnetlink功能。
2、如果是刚提的新车,一般为后台还没数据,需要等待几天。
3、确定店内登记手机号与注册手机号是否一致,手机号不匹配时,gnetlink是无法关联车辆的。
4、重置机车网络。
5、确定下载APK软件是否正常。可卸载,重新安装试试
netlink光纤收发器的使用范围
1、 实现交换机之间的互联。
2、 实现交换机和计算机之间的互联。
3、 实现计算机之间的互联。
4、 传输中继:当实际传输距离超过netlink收发器的标称传输距离,特 别是实际传输距离超过120Km的时候,在现场条件允许的情况下,采用2台收发器背对背进行中继或采用光-光转换器进行中继,是一种很经济有效的解决方案。
5、 单多模转换:当网络间出现需要单多模光纤连接时,可以用1台多模收发器和1台单模收发器背对背连接,解决了单多模光纤转换的问题。
6、 波分复用传输:当长距离光缆资源不足,为了提高光缆的使用率,降低造价,可将收发器和波分复用器配合使用,让两路信息在同一对光纤上传输。

本文相关文章:
complicated的意思(complicated什么意思)
2026年10月1日 20:10
linux内核(Linux内核有多大,不同Linux版本内核有什么差别呢)
2026年10月1日 11:50
eclipse开发教程(eclipse怎么编写JAVA程序,怎么新建)
2026年9月24日 15:00
尚未调用coinitialize(电脑总是出现“尚未调用CoInitialize.“.怎么才能让它消失)
2026年9月15日 07:50
oracle数据库基本操作(怎么在linux中操作oracle数据库)
2026年9月10日 03:00
更多文章:
易语言网页api接口怎么调用(易语言,怎么读取网页json的api)
2026年10月11日 08:00
majority of(the majority of 和 a majority of的区别以及用法例句)
2026年10月11日 07:40
another time(another time和other time的区别)
2026年10月11日 05:00







