有谁知道怎样从linux系统中获得ip和mac的系统函数
我知道windows有,但是linux有没有呢?是什么?
很急。。。
在线等。。。。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
我知道windows有,但是linux有没有呢?是什么?
很急。。。
在线等。。。。
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(7)
有的,但是我忘了,应该是用ioctl之类的命令获得吧
struct ifreq if_r;
strcpy(if_r.ifr_name,"eth0";
ioctl(_sock_FD,SIOCGIFADDR,&if_r); // get IP address
ioctl(_sock_FD,SIOCGIFHWADDR,&if_r); // get mac address
多谢多谢!
但是,加入我的linux的网卡名不叫'eth0'呢?
谢谢db_info
但是有几个不明白的地方:
ioctl 中的_sock_FD是什么意思,直接使__sock_FD就可以了吗?
多谢指点!
能不能进一步明示,真的看不懂
我的测试程序:
#include <sys/ioctl.h>;
#include <linux/if.h>;
int main()
{
struct ifreq if_r;
strcpy(if_r.ifr_name,"eth0";
ioctl(_sock_FD,SIOCGIFADDR,&if_r); // get IP address
ioctl(_sock_FD,SIOCGIFHWADDR,&if_r); // get mac address
printf("if_r's addr is %s",if_r.ifru_addr.sa_data);
return 0;
}
肯定是不能通过的,但是,大致的错误还请指点!
#include <sys/ioctl.h>;
#include "net/if.h"
int main(void)
{
unsigned char hw[64], out[64];
int sk, i;
struct ifreq pt;
char *eth = "eth0";
memset(hw, 0, 64);
memset(out, 0, 64);
sk = socket(AF_INET, SOCK_DGRAM, 0);
if (sk < 0) {
printf("create socket error!\n";
}
strcpy(pt.ifr_name, eth);
if (ioctl(sk, SIOCGIFHWADDR, &pt)) {
printf("ioctl error!\n";
close(sk);
}
memcpy(out, pt.ifr_hwaddr.sa_data, 6);
close(sk);
for (i = 0; i < 6; i++) {
sprintf((char*)&hw[3 * i], "%02x:", out);
}
hw[17] = '\0';
printf("mac:%s\n", hw);
return 0;
}
上面我的程序肯定能行, 但不知道哪位大虾有更好的办法没有
比方说一个系统函数就行?