嵌入式 hi3518平台获取网络环境中的ip、netmask、broadcast等信息
- <span style="font-family:Courier New;">
 - /********************************** (C) COPYRIGHT *******************************
 - * File Name : get_netinfo.c
 - * Author : skdkjzz
 - * Date : 2014/08/07
 - * Description : linux下获取网卡信息
 - *********************************************************************************/
 - #include <stdio.h>
 - #include <stdlib.h>
 - #include <string.h>
 - #include <sys/types.h>
 - #include <sys/socket.h>
 - #include <netinet/in.h>
 - #include <linux/if.h>
 - #include <arpa/inet.h>
 - #include <linux/sockios.h>
 - int main(int argc,char*argv[]){
 - int s;
 - int err;
 - s=socket(AF_INET,SOCK_DGRAM,0);
 - if(s<0){
 - perror("socket error");
 - return;
 - }
 - struct ifreq ifr;
 - #if 1
 - memset(&ifr,0,sizeof(ifr));
 - ifr.ifr_ifindex=1; /* 获得第1个网络接口的名称 */
 - err=ioctl(s,SIOCGIFNAME,&ifr);
 - if(err)
 - {
 - perror("index error");
 - }else
 - {
 - printf("----------------------------------\n");
 - printf("The %dst net device is : %s\n",ifr.ifr_ifindex,ifr.ifr_name);
 - }
 - err=ioctl(s,SIOCGIFHWADDR,&ifr); /* 获得MAC地址 */
 - printf("%s:[%d] err is %d\n",__FUNCTION__,__LINE__,err);
 - if(!err)
 - {
 - unsigned char* hw=ifr.ifr_hwaddr.sa_data;
 - printf("Mac address is : %02x:%02x:%02x:%02x:%02x:%02x\n",hw[0],hw[1],hw[2],hw[3],hw[4],hw[5]);
 - }
 - else
 - {
 - printf("Mac address is : 00:00:00:00:00:00\n");
 - }
 - struct sockaddr_in *sin=(struct sockaddr_in*)&ifr.ifr_addr; /* 获取网络接口IP保存的是二进制IP */
 - char ip[16]; /* 字符数组,存放字符串 */
 - memset(ip,0,16);
 - err=ioctl(s,SIOCGIFADDR,&ifr);
 - if(!err)
 - {
 - inet_ntop(AF_INET,&sin->sin_addr.s_addr,ip,16); /* 转换的字符串保存到ip数组中,第二个参数是要转换的二进制IP指针,第三个参数是转换完成存放IP的缓冲区,最后一个参数是缓冲区的长度 */
 - printf("IP address is : %s\n",ip);
 - }else
 - {
 - printf("IP address is : 0.0.0.0\n");
 - }
 - err=ioctl(s,SIOCGIFBRDADDR,&ifr); /* 得到接口的广播地址 */
 - if(!err)
 - {
 - struct sockaddr_in *broadcast=(struct sockaddr_in*)&ifr.ifr_broadaddr;
 - inet_ntop(AF_INET,&broadcast->sin_addr.s_addr,ip,16); /* 转换成字符串,inet_ntop将二进制IP转换成点分十进制的字符串 */
 - printf("BROADCAST IP is : %s\n",ip);
 - }else
 - {
 - printf("BROADCAST IP is : 0.0.0.0\n",ip);
 - }
 - printf("----------------------------------\n");
 - #else
 - memset(&ifr,0,sizeof(ifr));
 - ifr.ifr_ifindex=2; /* 获得第2个网络接口的名称 */
 - err=ioctl(s,SIOCGIFNAME,&ifr);
 - memcpy(ifr.ifr_name,argv[1],5);
 - if(err){
 - perror("index error");
 - }else{
 - printf("The %dst net device is : %s\n",ifr.ifr_ifindex,ifr.ifr_name);
 - }
 - err=ioctl(s,SIOCGIFHWADDR,&ifr); /* 获得MAC地址 */
 - if(!err){
 - unsigned char* hw=ifr.ifr_hwaddr.sa_data;
 - printf("Mac address is : %02x:%02x:%02x:%02x:%02x:%02x\n",hw[0],hw[1],hw[2],hw[3],hw[4],hw[5]);
 - }else{
 - printf("Mac address is : 00:00:00:00:00:00\n");
 - }
 - sin=(struct sockaddr_in*)&ifr.ifr_addr;
 - memset(ip,0,16);
 - err=ioctl(s,SIOCGIFADDR,&ifr);
 - if(!err){
 - inet_ntop(AF_INET,&sin->sin_addr.s_addr,ip,16);
 - printf("IP address is : %s\n",ip);
 - }else{
 - printf("IP address is : 0.0.0.0\n");
 - }
 - err=ioctl(s,SIOCGIFBRDADDR,&ifr); /* 得到接口的广播地址 */
 - if(!err){
 - struct sockaddr_in *broadcast=(struct sockaddr_in*)&ifr.ifr_broadaddr;
 - inet_ntop(AF_INET,&broadcast->sin_addr.s_addr,ip,16);/* 转换成字符串,inet_ntop将二进制IP转换成点分十进制的字符串 */
 - printf("BROADCAST IP is : %s\n",ip);
 - }else{
 - printf("BROADCAST IP is : 0.0.0.0\n",ip);
 - }
 - #endif
 - printf("----------------------------------\n");
 - close(s);
 - }
 - </span>
 
嵌入式 hi3518平台获取网络环境中的ip、netmask、broadcast等信息的更多相关文章
- 嵌入式 hi3518平台获取网关
		
</pre><pre code_snippet_id="495447" snippet_file_name="blog_20141024_1_70650 ...
 - 在 Linux 平台及 IPv4 环境中构建 IPv6局域网 测试环境
		
在 Linux 平台及 IPv4 环境中构建 IPv6 测试环境 1 IPv6简介 IPv6(Internet Protocol Version 6)作为 IPv4 的升级版本,它是作为一共软件升级安 ...
 - 使用Sysmon和Splunk探测网络环境中横向渗透
		
当前很难在网络中探测攻击者横向渗透,其中原因有很难获取必要的日志和区别正常与恶意行为.本篇文章介绍通过部署Sysmon并将日志发送到SIEM来探测横向渗透. 工具: Sysmon + Splunk l ...
 - 在低带宽或不可靠的网络环境中安装 Visual Studio 2017
		
在低带宽或不可靠的网络环境中安装 Visual Studio 2017 2017-4-141 分钟阅读时长 作者 https://docs.microsoft.com/zh-cn/visualstu ...
 - 使用pipework将Docker容器配置到本地网络环境中
		
使用pipework将Docker容器配置到本地网络环境中 需求 在使用Docker的过程中,有时候我们会有将Docker容器配置到和主机同一网段的需求.要实现这个需求,我们只要将Docker容器和主 ...
 - 使用pipework将Docker容器桥接到本地网络环境中
		
在使用Docker的过程中,有时候我们会有将Docker容器配置到和主机同一网段的需求.要实现这个需求,我们只要将Docker容器和主机的网卡桥接起来,再给Docker容器配上IP就可以了.pipew ...
 - 嵌入式 hi3518平台uboot引导nfs文件系统
		
首先贴出来我的bootargs的设置(注没有换行符!!!): setenv bootargs noinitrd mem=64M root=/dev/nfs init=/linuxrc rw nfsro ...
 - [置顶] 获取网络数据中的数组显示成ListView的简单流程
		
首先说一下 这是我自己的个人笔记,如果想看看,不用看细节,可以看流程. 定义一个线程池 ExecutorService pool = Executors.newFixedThreadPool(15) ...
 - 如何获取 C# 类中发生数据变化的属性信息
		
一.前言 在平时的开发中,当用户修改数据时,一直没有很好的办法来记录具体修改了那些信息,只能暂时采用将类序列化成 json 字符串,然后全塞入到日志中的方式,此时如果我们想要知道用户具体改变了哪几个字 ...
 
随机推荐
- C语言关键字
			
No. 关键字 意义 备注 1 auto 声明自动变量 2 break 跳出当前循环 3 case switch语句的分支 4 char 声明字符型变量 5 const 声明只读变量 C90新增 6 ...
 - JLINK V8 升级5.12E 在MDK5.20不变砖
			
转载:只是用了新的固件,步骤跟原子提供的方法 是一模一样的.这边也把步骤写了上来. 使用 SAM-PROG 更新 JLINK 固件一 :安装软件 安装 Install AT91-ISP v1.13.e ...
 - 修改webapp底图
			
从webapp目录可以看出地图归mapManager处理,所以在MapManager.js中找关于加载地图的方法, 很容易在里面找到showMap方法: 下面有另一个方法_showMap方法,查看定义 ...
 - python操作json
			
概念 序列化(Serialization):将对象的状态信息转换为可以存储或可以通过网络传输的过程,传输的格式可以是JSON.XML等.反序列化就是从存储区域(JSON,XML)读取反序列化对象的状态 ...
 - USACO Section 3.3: Home on the Range
			
到最后发现是DP题 /* ID: yingzho1 LANG: C++ TASK: range */ #include <iostream> #include <fstream> ...
 - ActionScript 设置元件色彩属性
			
var clr:Color = new Color(mc); var ct:Object = {ra:100, rb:0, ga:100, gb:0, ba:100, bb:0, aa ...
 - 监听Activity进入后台(最小化),并根据时间判断是否超时,此解决办法可用于超时重登陆
			
通过重写一个继承自Activity的基类中的onUserLeaveHint()方法,当用户按Home键等操作使程序进入后台时即开始计时,当用户使程序恢复为前台显示时执行onResume()方法,在其中 ...
 - 浅谈Linux下的五种I/O模型
			
一.关于I/O模型的引出 我们都知道,为了OS的安全性等的考虑,进程是无法直接操作I/O设备的,其必须通过系统调用请求内核来协助完成I/O动作,而内核会为每个I/O设备维护一个buffer.如下图所 ...
 - Spring高级事务管理难点剖析
			
1Spring事务传播行为 所谓事务传播行为就是多个事务方法相互调用时,事务如何在这些方法间传播.Spring支持7种事务传播行为 PROPAGATION_REQUIRED(加入已有事务) 如果当前没 ...
 - How to install cacti With Nginx
			
转载于:https://github.com/blackyboy/Ubuntu-Linux-Stuffs/blob/master/How-to-install-Cacti-Monitoring-Ser ...