用ioctl设置了网卡的ip地址和掩码后,如何激活?

自写网卡抓包程序 网上网卡抓包程序已经较多,我也就在这里写下近段时间我的感悟,一作自己整理思路,二为需要的人取用。本文所做的网卡抓包程序类似于简化版wireshark功能。废话不多说,我们开始。 我们的目标是获取所有经过本地网卡的报头信息,包括链路层的MAC头,网络层的IP头,传输层的tcp或udp头,以及应用层的http头,并将其完整打印出来。 整个思路其实很简单,无非就是获取经过网卡的数 阅读详情

请问用ioctl设置了网卡的ip地址和掩码后,如何激活?

我在程序中用ioctl函数设置了网卡的ip地址和掩码,但是设置完成后,网络并没有激活,还是不能收发数据,但是退出程序用ifconfig-a查看,设置已经成功,然后用ifconfig激活,就可以收发数据了,请问,能不能用ioctl在设置完ip地址和掩码后,直接用ioctl激活?或者还有其他的方法在程序中直接激活网络设置?谢谢啊

morninglight 发表于 2006-6-20 15:27

system("ifconfig eth0 192.168.168.1 mask 255.255.255.0");
就可以直接激活了。

flag 发表于 2006-6-20 17:45

[code]
struct ifreq buf[MAXINTERFACES];
struct ifconf ifc;
int fd,intrface;
if ((fd = socket (AF_INET, SOCK_DGRAM, 0)) >= 0) {
ifc.ifc_len = sizeof(buf);
ifc.ifc_buf = (caddr_t) buf;
intrface = ifc.ifc_len / sizeof (struct ifreq);
printf("interface num is intrface=%d/n/n/n",intrface);
while (intrface-- > 0)
{
if (!ioctl (fd, SIOCGIFCONF, (char *) &ifc)) {
ioctl (fd, SIOCGIFFLAGS, (char *) &buf[intrface]);
if (!buf[intrface].ifr_flags & IFF_UP) {
buf[intrface].ifr_flags |=IFF_UP;
}
ioctl (fd, SIOCSIFFLAGS, (char *) &buf[intrface]);
}
close(fd);
[/code]
不用多解释了吧?

morninglight 发表于 2006-6-22 10:35

版主,你好,我不会用那些ioctl,比如:ioctl (fd, SIOCGIFCONF, (char *) &ifc)和ioctl (fd, SIOCGIFFLAGS, (char *) &buf[intrface]),你能不能解释一下?多谢。

flag 发表于 2006-6-22 13:02

ioctl是系统调用,用于对设备的操作,如果你了解一些驱动源码的话,应该明白。具体地说,ioctl是向内核提交一个命令,用于获取或者设置和设备相关的参数。SIOCGIFCONF是获取,SIOCSIFFLAGS是设置,看到区别了吗?
ioctl (fd, SIOCGIFFLAGS, (char *) &buf[intrface]);这句是获取设备的当前状态
buf[intrface].ifr_flags |=IFF_UP;设置激活标志
ioctl (fd, SIOCSIFFLAGS, (char *) &buf[intrface]);然后设置,很简单吧。

morninglight 发表于 2006-6-23 11:57

谢谢版主指导

c语言实现设置ip网关、子网掩码 c语言,包含获取指定网口ip地址,mac地址网关,以及c语言实现修改ip网关,子网掩码,以及设置socket套接字加入到多播组的方法;。 立即下载

相关推荐

修改网卡ip地址 子网掩码 mac地址

ioctl 参考net-tools源码 修改网卡ip地址 子网掩码 mac地址

linux 利用ioctl函数获取IP地址、子网掩码、MAC地址修改本机IP地址、子网掩码网关

ioctl函数原型: int ioctl(int fd, int request, ..../*void *arg*/) int fd:为socket函数返回值 int request:SIOCSIFADDR 修改ip地址              SIOCSIFNETMASK 修改子网掩码      SIOCADDRT  修改网关 第三个参数:分别为相对应的结构体。ip子网掩码结构

Broyal 1万+

网络ioctl实践3:设置网卡的mac、ip、子网掩码、广播地址

网络ioctl实践3:设置网卡的mac、ip、子网掩码、广播地址

2418

Linux下通过ioctl修改IP信息

通过ioctl修改ip地址网关掩码 #include <stdio.h> #include <string.h> #include <unistd.h> #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <...

qq_31041847的博客 1442

Linux下通过ioctl系统调用来获取设置网络信息

#include   #include   #include   #include   #include   #include   #include   #include   #include     // 获取IP地址,子网掩码,MAC地址  int GetLocalNetInfo(      const char* lpszEth,      char* szIp

huangyong7795的专栏 832

C 代码激活网卡并配置IP与子网掩码

使用C激活网卡,并配置ip掩码

我要出家当道士 756

ioctl 获取相关地址及开启关闭网卡

1,结构体 struct ifreq { #define IFHWADDRLEN 6 union { char ifrn_name[IFNAMSIZ]; } ifr_ifrn; union { struct sockaddr ifru_addr; struct sockaddr ifru_dstaddr; struct sockaddr ifru_broadaddr; struct sockaddr ifru_netmask; struct sockaddr

qq_33436509的博客 1170

ioctl 获取本机网卡ip地址 | socket()

科学尊敬事实,不克不及胡乱编造来由来附会一部学说。 #include #include #include #include #include #include #include int main() { int inet_sock; struct ifreq ifr; inet_sock = socket(AF_INET, SOCK_D

@奮 鬥@的专栏 1919

自己动手写路由器之ioctl获取网络接口信息

最近打算写一个简单路由器,里面有用到ioctl获取网络接口信息,那就先把这部分单独拿出来说一说吧! ioctl这个函数,可以用来对特殊文件的基础设备参数进行操作,它们可以完成与打开文件描述符相关联的控制功能。在程序启动时获得主机上所有接口的信息: 接口的地址、接口是否支持广播、是否支持多播等等。成功返回0,出错则返回-1。 本文里只是单独对获取网络接口信息部分讲解。 先列出一些本文里ioct

xh19910615的专栏 1100

ioctl 获取本机网卡ip地址 | socket() 复制代码

#include #include #include #include #include #include #include int main() { int inet_sock; struct ifreq ifr; inet_sock = socket(AF_INET, SOCK_DGRAM, 0); //eth0为接口到名称 strcp

我不会编程,但不是完全不会,我会一点点 1052

获取网卡信息

示例 #include <stdio.h> #include <sys/types.h> /* See NOTES */ #include <sys/socket.h> #include <net/if.h> #include <unistd.h&g...

qq_34738528的博客 422

LINUX系统两个IP绑定!

<!--google_ad_client = "pub-5873492303276472";/* 728x90, 创建于 08-7-29 */google_ad_slot = "7502041044";google_ad_width = 728;google_ad_height = 90;// --><!--google_ad_client = "pub-5

SNIDEL LILYBROWN ANDROID JAVA POSTGRESQL STRUTS EC 2071

启用tun设备开启tap虚拟网卡功能

关于tun设备启用tap网卡,就是启用一个字符设备,使用open函数得到一个tun设备的文件描述符,可以使用writeread,或者pcap接口读写网卡,以下的部分为tun设备的控制代码,包括了网卡mac ip mask设置等,主要就是ioctl函数的使用 #include <stdio.h> #include <string.h> #include <sys/...

会飞的小企鹅的博客 5443
上一篇: linux系统ioctl使用示例
下一篇: 用C语言实现Ping程序功能
kingnightdream
博客等级 码龄20年 118粉丝 56原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值