部分转自http://www.cnblogs.com/zht-blog/p/4025903.html

#include <sys/types.h>
#include <sys/socket.h>
#include <sys/ioctl.h>
#include <stdio.h>
#include <string.h>
#include <net/if.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <errno.h>

unsigned char g_eth_name[16];
unsigned char g_macaddr[6];

unsigned int g_broadcast_addr;

int main()
{
    int i;
    int rv;
    int fd;
    struct ifreq ifr;
    struct sockaddr_in sin;
    char ipaddr[50];

fd = socket(AF_INET, SOCK_STREAM, 0);
    if (-1 == fd)
    {
        return;
    }

strcpy(g_eth_name, "eth0");
    strcpy(ifr.ifr_name, g_eth_name);

if ( ioctl(fd, SIOCGIFHWADDR, &ifr) < 0)
    {
        close( fd );
        return;
    }
    memcpy(g_macaddr, ifr.ifr_hwaddr.sa_data, sizeof(g_macaddr));
    printf("local mac:");
    for(i=0;i<sizeof(g_macaddr)-1;i++)
    {
        printf("%.2x:", g_macaddr[i]);
    }
    printf("%.2x\n", g_macaddr[i]);

//get the broadcast addr
    if ( ioctl(fd, SIOCGIFBRDADDR, &ifr) < 0)
    {
        close( fd );
        return;
    }
    memcpy(&sin, &ifr.ifr_addr, sizeof(sin));
    g_broadcast_addr = sin.sin_addr.s_addr;
    printf("broadcast is :%s\n", inet_ntoa(sin.sin_addr));

//set the mask

struct sockaddr_in *sin_net_mask;
    memset(&ifr, 0, sizeof(ifr));
    strncpy(ifr.ifr_name, "eth0", sizeof(ifr.ifr_name )-1);
    sin_net_mask = (struct sockaddr_in *)&ifr.ifr_addr;
    sin_net_mask->sin_family = AF_INET;
    inet_pton(AF_INET, "255.255.255.0", &sin_net_mask ->sin_addr);

if (ioctl(fd, SIOCSIFNETMASK, &ifr ) < 0)
    {
        close( fd );
        printf("set net mask error:%s\n", strerror(errno));
        return;
    }

close( fd );

ioctl函数,可以获取ip地址,修改ip地址,网卡地址等的更多相关文章

  1. shell 获取网关 以及修改ip 启用网卡

    shell 获取网关 以及修改ip 启用网卡 #!/bin/bash #autho freefei #script is a init computer eth #data 2014 10 09 19 ...

  2. linux修改主机名,关闭图形化界面,绑定ip地址,修改ip地址

    1关闭图形化界面 vi /etc/inittab 改成id:3:initdefault: 注意:不要选0或6 2.修改主机名 vi /etc/sysconfig/network 修改即可 3,修改ip ...

  3. ip地址获取无效,自己修改ip地址

    (1)

  4. centos7网口添加IP,修改默认路由永久地址生效

    1永久增加ip地址和路由 网卡永久添加ip地址 注释:ens192为管理地址网卡,请根据实际情况进行修改,网关以192.168.160.1为例 复制一份网卡配置文件命名为ifcfg-ens192:1 ...

  5. Linux下利用ioctl函数获取网卡信息

    linux下的ioctl函数原型如下: #include <sys/ioctl.h> int ioctl(int handle, int cmd, [int *argc, int argv ...

  6. mac地址和ip地址、子网掩码和默认网关

    MAC地址 MAC(Media Access Control或者Medium Access Control)地址,意译为媒体访问控制,或称为物理地址.硬件地址,用来定义网络设备的位置.在OSI模型中, ...

  7. node获取本机动态IP,并对应修改相关JavaScript文件的IP地址

    目录 由于本机是自动获取分配的动态IP,所以每次重启后需要重新更改与IP相关文件 参考 时间:2018-08-02,更新时间:2018-11-06 注意:在win10环境运行无问题 由于本机是自动获取 ...

  8. Delphi 调用netsh命令修改IP地址

    Delphi 调用netsh命令修改IP地址 先介绍一下Netsh命令的使用方法: 在这里跟大家介绍几个简单的指令 1.Show IP 1.1Cmd Mode 直接在cmd下面输入 netsh int ...

  9. 使用Python获取计算机名,ip地址,mac地址等等

    获取计算机名 # 获取计算机名,常用的方法有三种 import os import socket # method one name = socket.gethostname() print(name ...

  10. 手动修改ARM Linux的静态IP和用QT获取和修改IP

    .vi /etc/network/interfaces # 找到“# Wired or wireless interfaces” .注释掉 iface eth0 inet dhcp 这是自动获取ip地 ...

随机推荐

  1. jstack(Stack Trace for Java)

    功能   用于生成虚拟机当前时刻的线程快照(一般称为threaddump或javacore文件).线程快照就是当前虚拟机内每一条线程正在执行的方法堆栈的集合,生成线程快照的主要目的是定位线程出现长时间 ...

  2. 【模拟】XMU 1055 数七

    题目链接: http://acm.xmu.edu.cn/JudgeOnline/problem.php?id=1055 题目大意: 报数游戏,不能报7的倍数和2进制下含有111的数. 给定n,m(1& ...

  3. freemarker基本知识总结

    1.取出内容 ${} 例如,${document.fileName} 2. <ul> <#list cms.documents("channel=XXXX") a ...

  4. 查看Linux发行版的名称和版本号

    Method #1: /etc/*-release file 在Terminal中执行命令: cat /etc/*-release 我的输出结果: DISTRIB_ID=Ubuntu DISTRIB_ ...

  5. Android新浪微博客户端(四)——添加多个账户及认证

    原文出自:方杰| http://fangjie.info/?p=75转载请注明出处 二.获取用户信息并保存数据库 上面说到加载AuthActivity有两种情况,其中一种就是授权成功回调,在授权回调成 ...

  6. J.Hilburn:高档男装市场颠覆者_网易财经

    J.Hilburn:高档男装市场颠覆者_网易财经 J.Hilburn:高档男装市场颠覆者

  7. spring中@value注解需要注意

    首先,@value需要参数,这里参数可以是两种形式:@Value("#{configProperties['t1.msgname']}")或者@Value("${t1.m ...

  8. Windows 已在 DImageProcess.exe 中触发一个断点。

    其原因可能是堆被损坏,这说明 DImageProcess.exe 中或它所加载的任何 DLL 中有 Bug. 原因也可能是用户在 DImageProcess.exe 具有焦点时按下了 F12. 输出窗 ...

  9. CentOS 6.3下部署LVS(NAT)+keepalived实现高性能高可用负载均衡【转】

    CentOS 6.3下部署LVS(NAT)+keepalived实现高性能高可用负载均衡   一.简介 VS/NAT原理图: 二.系统环境 实验拓扑: 系统平台:CentOS 6.3 Kernel:2 ...

  10. [Angular 2] Using a Value from the Store in a Reducer

    RxJS allows you to combine streams in various ways. This lesson shows you how to take a click stream ...