获得本地路由表的程序
来源:互联网 发布:无人机属于人工智能吗 编辑:程序博客网 时间:2024/06/05 04:19
本程序相当与命令:$netstat -r
/* * ===================================================================================== * * Filename: route.c * * Description: * * Version: 1.0 * Created: 2012年02月23日 21时07分13秒 * Revision: none * Compiler: gcc * * Author: MaZheng (blog.csdn.net/mazheng1989), mazheng19891019@gmail.com * Company: Dalian University Of Technology * * ===================================================================================== */#include<netinet/ip.h>#include<netinet/in.h>#include<sys/socketvar.h>#include<net/if.h>#include<netinet/ip.h>#include<arpa/inet.h>#include<unistd.h>#include<sys/types.h>#include<asm/types.h>#include<linux/netlink.h>#include"route.h"#include<sys/socket.h>#include<sys/time.h>#include<net/route.h>#include<stdlib.h>#include<stdio.h>#include<sys/param.h>/*此函数用于将收到的套接字地址拷贝到套接字地址数据rt_info*/void cp_rtaddrs(int ,struct sockaddr_in *,struct sockaddr_in **);#defineBUFLEN (sizeof(struct rt_msghdr)+512) /* 消息缓冲区的长度 */#define RTA_DST 0x1 /* destination sockaddr present */#define RTA_GATEWAY 0x2 /* gateway sockaddr present */#define RTA_NETMASK 0x4 /* netmask sockaddr present */#define RTA_GENMASK 0x8 /* cloning mask sockaddr present */#defineSEQ 1234/* 消息序号 */#defineRTA_NUMBITS 10/* */int main(int argc,char **argv){int sockfd;char *buf;pid_t pid;ssize_t n;struct rt_msghdr *rtm;struct sockaddr_in *sa,*rt_info[RTA_NUMBITS];struct sockaddr_in *sin;if(argc!=2){printf("usage:%s<Ip address>\n",argv[0]);exit(0);}sockfd=socket(AF_ROUTE,SOCK_RAW,0);/*create a socket descriptro*/if(sockfd==-1){perror("socket error\n");exit(1);}buf=(char *)calloc(1,BUFLEN);/*分配缓冲区*/rtm=(struct rt_msghdr*)buf;rtm->rtm_msglen=sizeof(struct rt_msghdr)+sizeof(struct sockaddr_in);/*消息长度*/rtm->rtm_version=RTM_VERSION;/*版本号*/rtm->rtm_type=RTM_GET;/*消息类型*/rtm->rtm_addrs=RTM_DST;/*位屏蔽字*/rtm->rtm_pid=pid=getpid();/*进程号*/rtm->rtm_seq=SEQ;/*序号*/sin=(struct sockaddr_in *)(rtm+1);/*将目的地址填入跟在消息头后的套接字地址项中*/sin->sin_family=AF_INET;inet_pton(AF_INET,argv[1],&sin->sin_addr);write(sockfd,rtm,rtm->rtm_msglen);/*发送RTM_GET消息给路由套接字*//*通过循环读取路由套接字中的消息,直到读到类型为RTM_GET,序号为SEQ,进程ID为当前进程 * 的消息,表明该消息是所发消息的回应*/do{n=read(sockfd,rtm,BUFLEN);}while(rtm->rtm_type!=RTM_GET||rtm->rtm_seq!=SEQ||rtm->rtm_pid!=pid);sa=(struct sockaddr_in*)(rtm+1);cp_rtaddrs(rtm->rtm_addrs,sa,rt_info);/*讲读取的套接字地址拷贝到数组rt_info*/if((sa=rt_info[RTA_DST])!=NULL){printf("dest:%s\n",inet_ntoa(sa->sin_addr));}if((sa=rt_info[RTA_NETMASK])!=NULL){printf("netmask:%s\n",inet_ntoa(sa->sin_addr));}if((sa=rt_info[RTA_GATEWAY])!=NULL){printf("gateway:%s\n",inet_ntoa(sa->sin_addr));}exit(0);return 0;}
- 获得本地路由表的程序
- 获得本地时间的一段小程序
- 添加本地路由表项
- Windows下本地路由表
- 查询从本地到服务器的路由表状态
- CGI程序: 获得HTTP POST上传的文件,并保存在本地
- 获得程序的句柄
- 本地IP路由表命令route
- WindowsXP中修改本地路由表
- 本地IP路由表route命令
- 获得本地的ip地址和用户名
- 获得应用在服务器本地的绝对路径
- 获得本地电脑基本信息的封装类
- 获得本地时间的C语言代码
- 获得本地所有的网络适配器及其信息
- 获得本地计算机的IP地址
- qt获得本地IP的方法
- jsp获得本地及serverIP的方法
- 创造历史的10大黑客
- 文件上传 所传入的集合类型
- 微软智囊团揭秘
- C#中使用Monitor类、Lock和Mutex类来同步多线程的执行
- JQuery判断是否为数字,是否为空
- 获得本地路由表的程序
- 【转】JAVA 单例模式与多线程
- AJAX返回值
- 微软首席开发大师 查尔斯-西蒙尼
- Adobe的学者约翰—沃洛克博士
- BMW Multi tool V1.2
- 发现新大陆
- 如何组建环网
- NOPCommerce 增加功能 颜色和尺码管理研究实现: