当前位置: 首页 > news >正文

永州网站网站建设云南昆明网站建设公司

永州网站网站建设,云南昆明网站建设公司,怎样进行站点优化,做网络写手最好进那个网站文章目录 前言一、获取本机网关 ip 地址1.1 代码示例1.2 代码详解介绍 二、使用Netlink套接字实时监控网络事件2.1 简介2.2 示例代码 前言 这篇文章写了获取本机的ip地址和子网掩码#xff1a;Linux c语言获取本机 ip、子网掩码 一、获取本机网关 ip 地址 使用Netlink套接字… 文章目录 前言一、获取本机网关 ip 地址1.1 代码示例1.2 代码详解介绍 二、使用Netlink套接字实时监控网络事件2.1 简介2.2 示例代码 前言 这篇文章写了获取本机的ip地址和子网掩码Linux c语言获取本机 ip、子网掩码 一、获取本机网关 ip 地址 使用Netlink套接字从Linux内核的路由表中检索默认网关IP地址。 关于Netlink套接字请参考Linux 网络之netlink 简介 1.1 代码示例 代码如下 #include stdio.h #include stdlib.h #include string.h #include arpa/inet.h #include sys/socket.h #include linux/netlink.h #include linux/rtnetlink.h #include unistd.h#define BUFSIZE 8192struct nlreq {struct nlmsghdr hdr;struct rtmsg msg; };int main(void) {int sockfd socket(AF_NETLINK, SOCK_RAW, NETLINK_ROUTE);if (sockfd -1) {perror(socket error);exit(1);}struct sockaddr_nl sa;memset(sa, 0, sizeof(sa));sa.nl_family AF_NETLINK;if (bind(sockfd, (struct sockaddr *) sa, sizeof(sa)) -1) {perror(bind error);exit(1);}struct nlreq req;memset(req, 0, sizeof(req));req.hdr.nlmsg_len NLMSG_LENGTH(sizeof(struct rtmsg));req.hdr.nlmsg_type RTM_GETROUTE;req.hdr.nlmsg_flags NLM_F_REQUEST | NLM_F_DUMP;req.msg.rtm_family AF_INET;req.msg.rtm_table RT_TABLE_MAIN;req.msg.rtm_protocol RTPROT_UNSPEC;req.msg.rtm_scope RT_SCOPE_UNIVERSE;req.msg.rtm_type RTN_UNICAST;struct iovec iov;memset(iov, 0, sizeof(iov));iov.iov_base req;iov.iov_len req.hdr.nlmsg_len;struct msghdr msg;memset(msg, 0, sizeof(msg));msg.msg_name sa;msg.msg_namelen sizeof(sa);msg.msg_iov iov;msg.msg_iovlen 1;char buf[BUFSIZE];memset(buf, 0, sizeof(buf));struct nlmsghdr *hdr;int len;if (sendmsg(sockfd, msg, 0) -1) {perror(sendmsg error);exit(1);}while ((len recv(sockfd, buf, sizeof(buf), 0)) 0) {for (hdr (struct nlmsghdr *) buf; NLMSG_OK(hdr, len); hdr NLMSG_NEXT(hdr, len)) {if (hdr-nlmsg_type NLMSG_DONE) {goto finish;}if (hdr-nlmsg_type NLMSG_ERROR) {perror(NLMSG_ERROR);exit(1);}struct rtmsg *rt (struct rtmsg *) NLMSG_DATA(hdr);if (rt-rtm_family ! AF_INET || rt-rtm_table ! RT_TABLE_MAIN || rt-rtm_type ! RTN_UNICAST) {continue;}struct rtattr *attr;int attrlen;for (attr (struct rtattr *) RTM_RTA(rt), attrlen RTM_PAYLOAD(hdr); RTA_OK(attr, attrlen); attr RTA_NEXT(attr, attrlen)) {if (attr-rta_type RTA_GATEWAY) {char gw_addr[INET_ADDRSTRLEN];struct in_addr addr;memcpy(addr, RTA_DATA(attr), sizeof(addr));if (inet_ntop(AF_INET, addr, gw_addr, sizeof(gw_addr)) NULL) {perror(inet_ntop error);continue;}printf(Gateway address: %s\n, gw_addr);goto finish;}}}} finish:close(sockfd);return 0; }首先它使用socket函数创建一个Netlink套接字并使用bind将其绑定到本地地址。然后它使用nlreq结构体变量初始化Netlink消息的参数。消息请求使用RTM_GETROUTE类型检索路由表并指定要检索的路由的地址族、表、协议、范围和类型。消息还指定了NLM_F_DUMP标志以检索所有可用路由。 消息使用sendmsg发送到内核并使用recv接收。接收到的数据通过一个循环解析缓冲区中的Netlink消息。该循环跳过与IPv4单播路由和主表无关的消息。对于每个相关消息它使用另一个循环迭代路由属性并检索网关地址如果存在。网关地址使用printf打印到控制台并使用goto语句退出循环。 1.2 代码详解介绍 1使用socket函数创建一个Netlink套接字 int sockfd socket(AF_NETLINK, SOCK_RAW, NETLINK_ROUTE); if (sockfd -1) {perror(socket error);exit(1); }/* Protocol families. */ #define PF_NETLINK 16/* Address families. */ #define AF_NETLINK PF_NETLINK/* Types of sockets. */ enum __socket_type {SOCK_RAW 3, /* Raw protocol interface. */ #define SOCK_RAW SOCK_RAW };#define NETLINK_ROUTE 0 /* Routing/device hook */2绑定套接字到本地地址 struct sockaddr_nl sa; memset(sa, 0, sizeof(sa)); sa.nl_family AF_NETLINK; if (bind(sockfd, (struct sockaddr *) sa, sizeof(sa)) -1) {perror(bind error);exit(1); }绑定套接字到本地地址。这是为了确保接收到内核发送的Netlink消息。 3创建一个Netlink消息 struct nlreq req; memset(req, 0, sizeof(req)); req.hdr.nlmsg_len NLMSG_LENGTH(sizeof(struct rtmsg)); req.hdr.nlmsg_type RTM_GETROUTE; req.hdr.nlmsg_flags NLM_F_REQUEST | NLM_F_DUMP; req.msg.rtm_family AF_INET; req.msg.rtm_table RT_TABLE_MAIN; req.msg.rtm_protocol RTPROT_UNSPEC; req.msg.rtm_scope RT_SCOPE_UNIVERSE; req.msg.rtm_type RTN_UNICAST;创建一个Netlink消息用于向内核请求路由表。我们设置消息头部的长度、类型和标志以及rtmsg结构体的成员。这里我们只请求主路由表中的单播路由表项以获取默认网关的地址。 4将req结构体打包成一个iovec结构体 struct iovec iov; memset(iov, 0, sizeof(iov)); iov.iov_base req; iov.iov_len req.hdr.nlmsg_len;struct msghdr msg; memset(msg, 0, sizeof(msg)); msg.msg_name sa; msg.msg_namelen sizeof(sa); msg.msg_iov iov; msg.msg_iovlen 1;将req结构体打包成一个iovec结构体用于在消息中发送。我们还创建了一个msghdr结构体指定发送和接收消息的参数。 5使用sendmsg函数将消息发送到内核 if (sendmsg(sockfd, msg, 0) -1) {perror(sendmsg error);exit(1); }6使用recv函数从内核接收消息 char buf[BUFSIZE]; memset(buf, 0, sizeof(buf)); struct nlmsghdr *hdr; int len; if (sendmsg(sockfd, msg, 0) -1) {perror(sendmsg error);exit(1); } while ((len recv(sockfd, buf, sizeof(buf), 0)) 0) {for (hdr (struct nlmsghdr *) buf; NLMSG_OK(hdr, len); hdr NLMSG_NEXT(hdr, len)) {if (hdr-nlmsg_type NLMSG_DONE) {goto finish;}if (hdr-nlmsg_type NLMSG_ERROR) {perror(NLMSG_ERROR);exit(1);}// 解析路由表项} }使用recv函数从内核接收消息并使用NLMSG_OK、NLMSG_NEXT和NLMSG_DATA宏来循环遍历消息中的所有路由表项。 7获取默认网关的地址 struct rtmsg *rt (struct rtmsg *) NLMSG_DATA(hdr); if (rt-rtm_family ! AF_INET || rt-rtm_table ! RT_TABLE_MAIN || rt-rtm_type ! RTN_UNICAST) {continue; } struct rtattr *attr; int attrlen; for (attr (struct rtattr *) RTM_RTA(rt), attrlen RTM_PAYLOAD(hdr); RTA_OK(attr, attrlen); attr RTA_NEXT(attr, attrlen)) {if (attr-rta_type RTA_GATEWAY) {char gw_addr[INET_ADDRSTRLEN];struct in_addr addr;memcpy(addr, RTA_DATA(attr), sizeof(addr));if (inet_ntop(AF_INET, addr, gw_addr, sizeof(gw_addr)) NULL) {perror(inet_ntop error);continue;}printf(Gateway address: %s\n, gw_addr);goto finish;} } finish:close(sockfd);return 0; }/* Routing message attributes */enum rtattr_type_t {RTA_GATEWAY, };检查每个路由表项的类型和成员以确定是否找到了默认网关的地址。如果找到了使用inet_ntop函数将地址转换为可读形式并打印它。 二、使用Netlink套接字实时监控网络事件 2.1 简介 可以使用Netlink套接字实时监控网络事件。Netlink是一种基于套接字的接口用于与Linux内核通信。内核中的各个子系统都使用Netlink与用户空间应用程序通信包括网络子系统。 网络子系统使用Netlink在某些网络事件发生时向用户空间应用程序发送消息例如添加或删除网络接口、更改网络路由和更改网络地址。这些消息可以被用户空间应用程序用于实时监控网络事件。 要使用Netlink实时监控网络事件您需要创建一个Netlink套接字将其绑定到特定的Netlink协议然后使用recv函数从内核接收Netlink消息。然后您可以解析消息以提取有关已发生的网络事件的信息。 2.2 示例代码 #include stdio.h #include stdlib.h #include string.h #include unistd.h #include sys/socket.h #include linux/netlink.h #include linux/rtnetlink.h#define BUFFER_SIZE 4096int main(int argc, char *argv[]) {int netlinkSocket socket(AF_NETLINK, SOCK_RAW, NETLINK_ROUTE);if (netlinkSocket 0) {perror(创建Netlink套接字失败);exit(EXIT_FAILURE);}struct sockaddr_nl addr;memset(addr, 0, sizeof(addr));addr.nl_family AF_NETLINK;addr.nl_groups RTMGRP_LINK | RTMGRP_IPV4_IFADDR | RTMGRP_IPV6_IFADDR;if (bind(netlinkSocket, (struct sockaddr *)addr, sizeof(addr)) 0) {perror(将Netlink套接字绑定到地址失败);close(netlinkSocket);exit(EXIT_FAILURE);}char buffer[BUFFER_SIZE];struct iovec iov { buffer, sizeof(buffer) };struct msghdr msg { (void *)addr, sizeof(addr), iov, 1, NULL, 0, 0 };while (1) {ssize_t len recvmsg(netlinkSocket, msg, 0);if (len 0) {perror(接收Netlink消息失败);close(netlinkSocket);exit(EXIT_FAILURE);}struct nlmsghdr *nlh;for (nlh (struct nlmsghdr *)buffer; NLMSG_OK(nlh, len); nlh NLMSG_NEXT(nlh, len)) {switch(nlh-nlmsg_type) {case RTM_NEWLINK:printf(检测到新链接\n);break;case RTM_DELLINK:printf(链接已删除\n);break;case RTM_NEWADDR:printf(检测到新地址\n);break;case RTM_DELADDR:printf(地址已删除\n);break;default:printf(未知的消息类型 (%d)\n, nlh-nlmsg_type);break;}}}close(netlinkSocket);return 0; }在一个终端上编译程序并运行。 在另一个终端上输入以下命令来更改网络接口的状态 sudo ifconfig eth0 downsudo ifconfig eth0 up这只是一个简单的示例可以使用Netlink监控许多其他类型的网络事件。 rtnetlink.h头文件提供了所有可能的Netlink消息类型的列表可以用于监控其他类型的网络事件。 如下所示 /***** Routing/neighbour discovery messages.****//* Types of messages */enum {RTM_BASE 16, #define RTM_BASE RTM_BASERTM_NEWLINK 16, #define RTM_NEWLINK RTM_NEWLINKRTM_DELLINK, #define RTM_DELLINK RTM_DELLINKRTM_GETLINK, #define RTM_GETLINK RTM_GETLINKRTM_SETLINK, #define RTM_SETLINK RTM_SETLINKRTM_NEWADDR 20, #define RTM_NEWADDR RTM_NEWADDRRTM_DELADDR, #define RTM_DELADDR RTM_DELADDRRTM_GETADDR, #define RTM_GETADDR RTM_GETADDRRTM_NEWROUTE 24, #define RTM_NEWROUTE RTM_NEWROUTERTM_DELROUTE, #define RTM_DELROUTE RTM_DELROUTERTM_GETROUTE, #define RTM_GETROUTE RTM_GETROUTERTM_NEWNEIGH 28, #define RTM_NEWNEIGH RTM_NEWNEIGHRTM_DELNEIGH, #define RTM_DELNEIGH RTM_DELNEIGHRTM_GETNEIGH, #define RTM_GETNEIGH RTM_GETNEIGHRTM_NEWRULE 32, #define RTM_NEWRULE RTM_NEWRULERTM_DELRULE, #define RTM_DELRULE RTM_DELRULERTM_GETRULE, #define RTM_GETRULE RTM_GETRULERTM_NEWQDISC 36, #define RTM_NEWQDISC RTM_NEWQDISCRTM_DELQDISC, #define RTM_DELQDISC RTM_DELQDISCRTM_GETQDISC, #define RTM_GETQDISC RTM_GETQDISCRTM_NEWTCLASS 40, #define RTM_NEWTCLASS RTM_NEWTCLASSRTM_DELTCLASS, #define RTM_DELTCLASS RTM_DELTCLASSRTM_GETTCLASS, #define RTM_GETTCLASS RTM_GETTCLASSRTM_NEWTFILTER 44, #define RTM_NEWTFILTER RTM_NEWTFILTERRTM_DELTFILTER, #define RTM_DELTFILTER RTM_DELTFILTERRTM_GETTFILTER, #define RTM_GETTFILTER RTM_GETTFILTERRTM_NEWACTION 48, #define RTM_NEWACTION RTM_NEWACTIONRTM_DELACTION, #define RTM_DELACTION RTM_DELACTIONRTM_GETACTION, #define RTM_GETACTION RTM_GETACTIONRTM_NEWPREFIX 52, #define RTM_NEWPREFIX RTM_NEWPREFIXRTM_GETMULTICAST 58, #define RTM_GETMULTICAST RTM_GETMULTICASTRTM_GETANYCAST 62, #define RTM_GETANYCAST RTM_GETANYCASTRTM_NEWNEIGHTBL 64, #define RTM_NEWNEIGHTBL RTM_NEWNEIGHTBLRTM_GETNEIGHTBL 66, #define RTM_GETNEIGHTBL RTM_GETNEIGHTBLRTM_SETNEIGHTBL, #define RTM_SETNEIGHTBL RTM_SETNEIGHTBLRTM_NEWNDUSEROPT 68, #define RTM_NEWNDUSEROPT RTM_NEWNDUSEROPTRTM_NEWADDRLABEL 72, #define RTM_NEWADDRLABEL RTM_NEWADDRLABELRTM_DELADDRLABEL, #define RTM_DELADDRLABEL RTM_DELADDRLABELRTM_GETADDRLABEL, #define RTM_GETADDRLABEL RTM_GETADDRLABELRTM_GETDCB 78, #define RTM_GETDCB RTM_GETDCBRTM_SETDCB, #define RTM_SETDCB RTM_SETDCBRTM_NEWNETCONF 80, #define RTM_NEWNETCONF RTM_NEWNETCONFRTM_GETNETCONF 82, #define RTM_GETNETCONF RTM_GETNETCONFRTM_NEWMDB 84, #define RTM_NEWMDB RTM_NEWMDBRTM_DELMDB 85, #define RTM_DELMDB RTM_DELMDBRTM_GETMDB 86, #define RTM_GETMDB RTM_GETMDBRTM_NEWNSID 88, #define RTM_NEWNSID RTM_NEWNSIDRTM_DELNSID 89, #define RTM_DELNSID RTM_DELNSIDRTM_GETNSID 90, #define RTM_GETNSID RTM_GETNSIDRTM_NEWSTATS 92, #define RTM_NEWSTATS RTM_NEWSTATSRTM_GETSTATS 94, #define RTM_GETSTATS RTM_GETSTATS__RTM_MAX, #define RTM_MAX (((__RTM_MAX 3) ~3) - 1) };
文章转载自:
http://www.morning.fhcwm.cn.gov.cn.fhcwm.cn
http://www.morning.nqfxq.cn.gov.cn.nqfxq.cn
http://www.morning.mpscg.cn.gov.cn.mpscg.cn
http://www.morning.bwkzn.cn.gov.cn.bwkzn.cn
http://www.morning.mkzdp.cn.gov.cn.mkzdp.cn
http://www.morning.gjssk.cn.gov.cn.gjssk.cn
http://www.morning.tnfyj.cn.gov.cn.tnfyj.cn
http://www.morning.nkmw.cn.gov.cn.nkmw.cn
http://www.morning.kkwbw.cn.gov.cn.kkwbw.cn
http://www.morning.nhzxr.cn.gov.cn.nhzxr.cn
http://www.morning.lkbkd.cn.gov.cn.lkbkd.cn
http://www.morning.nhpgm.cn.gov.cn.nhpgm.cn
http://www.morning.pswqx.cn.gov.cn.pswqx.cn
http://www.morning.hxrg.cn.gov.cn.hxrg.cn
http://www.morning.pskjm.cn.gov.cn.pskjm.cn
http://www.morning.dxpzt.cn.gov.cn.dxpzt.cn
http://www.morning.bnfjh.cn.gov.cn.bnfjh.cn
http://www.morning.rqxtb.cn.gov.cn.rqxtb.cn
http://www.morning.nlhcb.cn.gov.cn.nlhcb.cn
http://www.morning.yqqxj26.cn.gov.cn.yqqxj26.cn
http://www.morning.nqlnd.cn.gov.cn.nqlnd.cn
http://www.morning.cgtfl.cn.gov.cn.cgtfl.cn
http://www.morning.clzly.cn.gov.cn.clzly.cn
http://www.morning.pgcmz.cn.gov.cn.pgcmz.cn
http://www.morning.zlff.cn.gov.cn.zlff.cn
http://www.morning.btypn.cn.gov.cn.btypn.cn
http://www.morning.bkjhx.cn.gov.cn.bkjhx.cn
http://www.morning.xbtlt.cn.gov.cn.xbtlt.cn
http://www.morning.jjsxh.cn.gov.cn.jjsxh.cn
http://www.morning.nkqrq.cn.gov.cn.nkqrq.cn
http://www.morning.qfths.cn.gov.cn.qfths.cn
http://www.morning.nqrlz.cn.gov.cn.nqrlz.cn
http://www.morning.lwrks.cn.gov.cn.lwrks.cn
http://www.morning.wpspf.cn.gov.cn.wpspf.cn
http://www.morning.nywrm.cn.gov.cn.nywrm.cn
http://www.morning.3ox8hs.cn.gov.cn.3ox8hs.cn
http://www.morning.pnmgr.cn.gov.cn.pnmgr.cn
http://www.morning.mcjp.cn.gov.cn.mcjp.cn
http://www.morning.ftmly.cn.gov.cn.ftmly.cn
http://www.morning.mnsts.cn.gov.cn.mnsts.cn
http://www.morning.hbkkc.cn.gov.cn.hbkkc.cn
http://www.morning.jngdh.cn.gov.cn.jngdh.cn
http://www.morning.jmmz.cn.gov.cn.jmmz.cn
http://www.morning.jzklb.cn.gov.cn.jzklb.cn
http://www.morning.pdxqk.cn.gov.cn.pdxqk.cn
http://www.morning.pqnkg.cn.gov.cn.pqnkg.cn
http://www.morning.jpbky.cn.gov.cn.jpbky.cn
http://www.morning.yxwrr.cn.gov.cn.yxwrr.cn
http://www.morning.fjptn.cn.gov.cn.fjptn.cn
http://www.morning.qgjxy.cn.gov.cn.qgjxy.cn
http://www.morning.ssglh.cn.gov.cn.ssglh.cn
http://www.morning.trzzm.cn.gov.cn.trzzm.cn
http://www.morning.xtqld.cn.gov.cn.xtqld.cn
http://www.morning.sbncr.cn.gov.cn.sbncr.cn
http://www.morning.rzdzb.cn.gov.cn.rzdzb.cn
http://www.morning.tnqk.cn.gov.cn.tnqk.cn
http://www.morning.mlwpr.cn.gov.cn.mlwpr.cn
http://www.morning.flzqq.cn.gov.cn.flzqq.cn
http://www.morning.txjrc.cn.gov.cn.txjrc.cn
http://www.morning.fnpyk.cn.gov.cn.fnpyk.cn
http://www.morning.kyhnl.cn.gov.cn.kyhnl.cn
http://www.morning.ghwtn.cn.gov.cn.ghwtn.cn
http://www.morning.bnxfj.cn.gov.cn.bnxfj.cn
http://www.morning.glnfn.cn.gov.cn.glnfn.cn
http://www.morning.qzpkr.cn.gov.cn.qzpkr.cn
http://www.morning.rknhd.cn.gov.cn.rknhd.cn
http://www.morning.csjps.cn.gov.cn.csjps.cn
http://www.morning.lmzpk.cn.gov.cn.lmzpk.cn
http://www.morning.qyxnf.cn.gov.cn.qyxnf.cn
http://www.morning.rscrj.cn.gov.cn.rscrj.cn
http://www.morning.gmwdl.cn.gov.cn.gmwdl.cn
http://www.morning.bkgfp.cn.gov.cn.bkgfp.cn
http://www.morning.qtwd.cn.gov.cn.qtwd.cn
http://www.morning.nzcgj.cn.gov.cn.nzcgj.cn
http://www.morning.zmlnp.cn.gov.cn.zmlnp.cn
http://www.morning.xjwtq.cn.gov.cn.xjwtq.cn
http://www.morning.zqxhn.cn.gov.cn.zqxhn.cn
http://www.morning.nggbf.cn.gov.cn.nggbf.cn
http://www.morning.njftk.cn.gov.cn.njftk.cn
http://www.morning.rdwm.cn.gov.cn.rdwm.cn
http://www.tj-hxxt.cn/news/266495.html

相关文章:

  • 湛江市建设教育协会学校网站网站都不需要什么备案
  • 安平网站建设培训网页版梦幻西游决战华山奖励
  • 网站建设协调机制德州市住房建设局网站
  • 网站整站建设制作照片视频的软件
  • 如何招聘软件网站开发人员中文网页模板免费下载
  • 网站建设行业 前景网站建设与维护招聘条件
  • 天津建设网站免费做的网站在不同浏览器
  • 网站建设方案需要哪些步骤网站正在升级建设中
  • 做网站有效果吗网络营销公司哪家好
  • 被称为网页制作三剑客的是seo内部优化具体做什么
  • seo网站优化系统制作七星网站
  • 网站域名解析时间最好的网站开发公司
  • 北京网站开发培训天马网络 网站建设
  • 一站式做网站哪家专业网络推广主要是做什么工作
  • 安徽干部学校建设网站百度seo收费
  • 手机网站建设目标长沙网上商城
  • 北京网站备案注销中心张艺兴粉丝做的网站
  • 福州百度网站排名优化福田补贴每人9000元
  • 离线推广网站规划书山东经济建设网站
  • 深圳定制开发网站wordpress页脚插件
  • 自己做网站制作流程wordpress opml
  • 民政局网站建设方案wordpress媒体库下载
  • 手机网站怎么做seo手机上怎么做网站创业
  • 成品网站开发中国2020最新军事新闻
  • 网站建设具体工作内容sem优化技巧
  • 网站建设要做哪些工作电商设计详情页
  • 天津建设工程合同备案网站wordpress弹出提示框
  • 网站源码安装步骤设计说明的英文
  • 建设网站上申请劳务资质吗张店网站制作
  • 淘客网站+wordpress烟台网站设计单位