ioctl函数,可以获取ip地址,修改ip地址,网卡地址等
部分转自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地址,网卡地址等的更多相关文章
- shell 获取网关 以及修改ip 启用网卡
shell 获取网关 以及修改ip 启用网卡 #!/bin/bash #autho freefei #script is a init computer eth #data 2014 10 09 19 ...
- linux修改主机名,关闭图形化界面,绑定ip地址,修改ip地址
1关闭图形化界面 vi /etc/inittab 改成id:3:initdefault: 注意:不要选0或6 2.修改主机名 vi /etc/sysconfig/network 修改即可 3,修改ip ...
- ip地址获取无效,自己修改ip地址
(1)
- centos7网口添加IP,修改默认路由永久地址生效
1永久增加ip地址和路由 网卡永久添加ip地址 注释:ens192为管理地址网卡,请根据实际情况进行修改,网关以192.168.160.1为例 复制一份网卡配置文件命名为ifcfg-ens192:1 ...
- Linux下利用ioctl函数获取网卡信息
linux下的ioctl函数原型如下: #include <sys/ioctl.h> int ioctl(int handle, int cmd, [int *argc, int argv ...
- mac地址和ip地址、子网掩码和默认网关
MAC地址 MAC(Media Access Control或者Medium Access Control)地址,意译为媒体访问控制,或称为物理地址.硬件地址,用来定义网络设备的位置.在OSI模型中, ...
- node获取本机动态IP,并对应修改相关JavaScript文件的IP地址
目录 由于本机是自动获取分配的动态IP,所以每次重启后需要重新更改与IP相关文件 参考 时间:2018-08-02,更新时间:2018-11-06 注意:在win10环境运行无问题 由于本机是自动获取 ...
- Delphi 调用netsh命令修改IP地址
Delphi 调用netsh命令修改IP地址 先介绍一下Netsh命令的使用方法: 在这里跟大家介绍几个简单的指令 1.Show IP 1.1Cmd Mode 直接在cmd下面输入 netsh int ...
- 使用Python获取计算机名,ip地址,mac地址等等
获取计算机名 # 获取计算机名,常用的方法有三种 import os import socket # method one name = socket.gethostname() print(name ...
- 手动修改ARM Linux的静态IP和用QT获取和修改IP
.vi /etc/network/interfaces # 找到“# Wired or wireless interfaces” .注释掉 iface eth0 inet dhcp 这是自动获取ip地 ...
随机推荐
- 【索引】gtest学习笔记
下载gtest 链接:http://www.cnblogs.com/duxiuxing/p/4270804.html gtest官方文档浅析 链接:http://www.cnblogs.com/dux ...
- JDK 和JRE的区别
JRE:Java Runtime Environment/Java运行时环境目标用户:只需要运行Java程序的用户JRE包含了:Deployment,User Interface Toolkits,I ...
- java笔记10之循环
关于for 循环语句:for循环,while循环,do...while循环. for循环格式: for(初始化语句;判断条件语句;控制条件语句) { ...
- WPF - EventSetter
WPF中添加Event 1. ListBox中添加Event <ListBox x:Name="itemsControl" BorderThickness="0&q ...
- appcan里面模板的使用
1:首先要定义一个字符串如果太长需要换行,可以用"\"来分割每行 2:模板里面使用的是ejs语法,所以可以使用if else语句等 3:字符串定义好之后要用appcan.view. ...
- Python模拟登录实战(三)
目标:模拟登录知乎 代码如下: #!/usr/bin/env python # -*- coding:utf-8 -*- __author__ = 'ziv·chan' import re impor ...
- SpriteKit所有的类
1.SKAction 2.SKCropNode 3.SKEffectNode 4.SKEmitterNode 5.SKKeyframeSequence 6.SKLabelNode 7.SKNode 8 ...
- Android Studio中自己定义快捷输入块
快捷键:Ctrl + Alt + s,进入Settings >Editor>Live Templates>output中加入一个项,选择第一个Live Template waterm ...
- PowerDesigner 生成带凝视SQL 各个版本号通用10(12、15)
做数据库是设计时最苦恼的事就是用PowerDesigner工具设计完数据库运行SQL文件后没有凝视.那么怎么才干让PowerDesigner设计完有凝视呢,下边教你一个笨的方法,方法尽管笨,可是能实现 ...
- sql 处理以字符隔开的字符串(类似split)
sql 处理以字符隔开的字符串(类似split)的处理方法. CREATE PROCEDURE dbo.Vip_SendMails @userids varchar(MAX), ), ), @c va ...