有谁知道怎样从linux系统中获得ip和mac的系统函数

发布于 2022-10-02 02:39:54 字数 180 浏览 18 评论 0

我知道windows有,但是linux有没有呢?是什么?

很急。。。
在线等。。。。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(7

不必了 2022-10-09 02:39:54

有的,但是我忘了,应该是用ioctl之类的命令获得吧

长伴 2022-10-09 02:39:54

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

白况 2022-10-09 02:39:54

多谢多谢!

但是,加入我的linux的网卡名不叫'eth0'呢?

红ご颜醉 2022-10-09 02:39:54

谢谢db_info

但是有几个不明白的地方:

ioctl 中的_sock_FD是什么意思,直接使__sock_FD就可以了吗?

多谢指点!

罪#恶を代价 2022-10-09 02:39:54

能不能进一步明示,真的看不懂
我的测试程序:

#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;
}

肯定是不能通过的,但是,大致的错误还请指点!

半山落雨半山空 2022-10-09 02:39:54

#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;
}

下壹個目標 2022-10-09 02:39:54

上面我的程序肯定能行, 但不知道哪位大虾有更好的办法没有
比方说一个系统函数就行?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文