嵌入式 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 字符串,然后全塞入到日志中的方式,此时如果我们想要知道用户具体改变了哪几个字 ...
随机推荐
- lintcode:被围绕的区域
被围绕的区域 给一个二维的矩阵,包含 'X' 和 'O', 找到所有被 'X' 围绕的区域,并用 'X' 填充满. 样例 给出二维矩阵: X X X X X O O X X X O X X O X X ...
- lintcode:最长公共子序列
题目 最长公共子序列 给出两个字符串,找到最长公共子序列(LCS),返回LCS的长度. 样例 给出"ABCD" 和 "EDCA",这个LCS是 "A& ...
- Android addRule()
布局中有很多特殊的属性,通常在载入布局之前,在相关的xml文件中进行静态设置即可. 但是,在有些情况下,我们需要动态设置布局的属性,在不同的条件下设置不同的布局排列方式,这时候就需要用到 Relati ...
- XML文件操作学习(一)
受人启发,从今天开始也把学到的东西记在博客里加深印象,并且完成这个梳理过程. 最近大多数的时间都花费在做系统配置上了.大部分的配置比较复杂的都用xml文件来存储.暂时发现有以下几点需要注意的地方. 今 ...
- highCharts图表入门实例
本文通过讲解Highcharts生成一个简单的3D柱状图实例来学习Highcharts的使用. JSP 页面 1.需要引入的js文件 <script src="<%=basePa ...
- SGU 106 The equation 扩展欧几里得好题
扩展欧几里得的应用……见算法竞赛入门经典p.179 注意两点:1.解不等式的时候除负数变号 2.各种特殊情况的判断( a=0 && b=0 && c=0 ) ( a=0 ...
- Android 手机配office365邮箱
1. 登录office365邮箱,Settings -> manager apps -> account -> Click "Settings for POP or IMA ...
- How to fix broken packages?(转)
Try Code: sudo apt-get update to update your package list.Then Code: sudo apt-get autoclean to clean ...
- 截取usb数据包,控制usb设备----Relay设备
在项目开发当中,我们需要一个usb转继电器的设备当开关控制无线发射设备,采购部采购时并未详细了解Relay设备的运行环境就买了一批设备,之后发现设备厂家只提供了windows库,而我们是要在linux ...
- (八)ASP.NET自定义用户控件(1)
http://blog.csdn.net/laodao1/article/details/5897366 ASP.NET自定义控件组件开发 第一章:从一个简单的控件谈起 起始开发ASP.NET自定义控 ...