LINUX下QT与C语言通过网卡名获取网卡IP与MAC

1、QT下

QString RuntimeConfig::ipAddress(QString network)
{
    QList<QNetworkAddressEntry> list;
    QString localIPaddress;

    QNetworkInterface interface = QNetworkInterface::interfaceFromName(network);
    list = interface.addressEntries();
    if (!list.isEmpty())
    {
        localIPaddress = list.at(0).ip().toString();
    }

    return localIPaddress;
}

QString RuntimeConfig::macAddress(QString network)
{
    QList<QNetworkInterface> netList;
    int netCount;
    int neti;
    QNetworkInterface myNet;
    netList = QNetworkInterface::allInterfaces();
    netCount = netList.count();

    for (neti = 0; neti < netCount; neti ++)
    {
        if (netList.at(neti).isValid() && netList.at(neti).name() == network)
        {
            myNet = netList.at(neti);
            break;
        }
    }
    return (myNet.hardwareAddress());
}

2、C语言下

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

#include "getinfo.h"

int getip(char *ip, char *name)
{
    int sock;
    struct sockaddr_in sin;
    struct ifreq ifr;
    sock = socket(AF_INET, SOCK_DGRAM, 0);
    if (sock == -1)
    {
        perror("socket");
        return -1;
    }
    strncpy(ifr.ifr_name, name, IFNAMSIZ);
    ifr.ifr_name[IFNAMSIZ - 1] = 0;
    if (ioctl(sock, SIOCGIFADDR, &ifr) < 0)
    {
        perror("ioctl");
        return -1;
    }
    memcpy(&sin, &ifr.ifr_addr, sizeof(sin));
    sprintf(ip, "%s", inet_ntoa(sin.sin_addr));
    return 0;
}

int getmac(char *mac, char *name)
{
    struct ifreq ifreq;
    int   sock;

    if((sock=socket(AF_INET,SOCK_STREAM,0)) <0)
    {
        perror( "socket ");
        return   2;
    }
    strcpy(ifreq.ifr_name, name);
    if(ioctl(sock,SIOCGIFHWADDR,&ifreq) <0)
    {
        perror( "ioctl ");
        return   3;
    }
    sprintf(mac, "%02x:%02x:%02x:%02x:%02x:%02x",
            (unsigned char)ifreq.ifr_hwaddr.sa_data[0],
            (unsigned char)ifreq.ifr_hwaddr.sa_data[1],
            (unsigned char)ifreq.ifr_hwaddr.sa_data[2],
            (unsigned char)ifreq.ifr_hwaddr.sa_data[3],
            (unsigned char)ifreq.ifr_hwaddr.sa_data[4],
            (unsigned char)ifreq.ifr_hwaddr.sa_data[5]);
    return 0;
}
时间: 2024-08-29 05:09:03

LINUX下QT与C语言通过网卡名获取网卡IP与MAC的相关文章

Linux下more命令C语言实现实践

1. more第一版 实现基础功能,显示每一页固定24行文本,"q Enter"退出, "Enter" 下一行, "space Enter"下一页. /************************************************************************* > File Name: more01.c > Author: qianlv > Mail: [email protected] &

Linux下Qt的安装与配置

参考资料:http://www.cnblogs.com/emouse/archive/2013/01/28/2880142.html Linux 下编译.安装.配置 QT 下载qt 这里用的是4.7.0版本 qt-everywhere-opensource-src-4.7.0.tar.gz 拷贝并解压 这里我装的是Vmware上面的linux,所以windows与linux直接的文件共享,建议用samba,Samba我前面的笔记有介绍,这里不详谈. 拷贝到下面这个目录下 解压用 : tar zx

linux下Qt调用非标准库中的函数调用----------如pthread_create、pthread_cond_***、、

在Linux下Qt中使用POSIX标准的pthread_creaet函数调用创建新线程,使用如下代码后编译通过 extern "C" { #include <pthread.h> } 但是运行后发现并未成功创建新线程,并且无报错!!! (编译链接时有添加:-lpthread) 其中原因本人尚不清楚... 并且pthread_mutex_*** (互斥锁).pthread_cond_*** (条件变量) 等相关函数估计也无效... 后来借鉴网友提供的方法:将C文件创建成函数库

Linux下QT中执行shell命令

当需要在QT中执行shell命令时可以利用以下方法: (1)首先包含头文件: #include <QProcess> (2)执行shell命令: QProcess::execute("ls"); ///////////////////// #include  <QProcess> void Widget:on_pushButton_clicked() { //* system("ls");//调用LINUX C函数库中的system(cons

Linux下Qt应用程序的发布(使用LDD命令查看所有依赖的库文件)

最近一直在学习Qt,用Qt写了一个程序,但是不知道怎么发布,网上说的都是在windows下怎么发布Qt应用程序,但是,在windows下Qt应用程序依赖的库文件与linux下的名字不同.于是,我就想到Linux下有没有这么一个命令,能够找到一个可执行文件运行时所依赖的库文件,百度一下,还真的有ldd命令. ldd的作用是打印可执行文件依赖的共享库文件,它是glibc的一部分: [email protected]:~# ldd --helpUsage: ldd [OPTION]... FILE..

解决Linux下Qt程序报『QString::arg: Argument missing: 无法解析SSLv2_client_method中的符号』错误

在Linux开发Qt应用,程序会报这样的错误: QString::arg:Argument missing: 无法解析SSLv2_client_method中的符号"SSLv2_client_method":ssl,(/lib/x86_64-linux-gnu/libssl.so.1.0.0: undefined symbol: SSLv2_client_method) QString::arg:Argument missing: 无法解析SSLv2_client_method中的符号

Linux下Qt环境的搭建

之前一直使用Ubuntu软件中心中的Qt4开发Qt的应用程序,现在转到Linux下来做Qt5开发,但是必须从Qt官网上面下载对应的安装包,配置起来相对麻烦一些,这里介绍整个开发流程. 首先,在官网上面可以找到离线安装包,最新的为qt-opensource-linux-x86-5.4.1.run,这是一个可执行文件,下载下来后可以修改权限后直接运行.另外,你也可以在官网上面找到源代码的压缩包,因为这是一个开源的GUI类库,所以你可以下载所有的源代码,然后自己在本机上面编译并安装. 这里我先介绍直接

LINUX下QT+googleprotobuf+socket

最近准备毕业,就一直闲着.在公司实习时候跟着华哥和强哥接触了googleprotobuf,感觉这东西是个好东西,但是当时网龙公司把底层都做好了,接触的就是直接调用他们做好的接口.自己也不懂socket之类的网络编程,现在准备往上海那边找工作,就自己琢磨琢磨下. 因为个人原因,我比较喜欢linux系统,就选用了linux平台的QT来做这个demo.用linux安装东西也方便很多. 首先我们来安装googleprotobuf wget http://protobuf.googlecode.com/f

Linux 下QT安装教程

2015-01-28 准备两个文件: qt-x11-opensource-src-4.5.3.tar.gz qt-creator-opensource-linux-x86_64-3.3.0.run 1.获得源代码 src 官网下载地址:ftp://ftp.qt.nokia.com/qt/source/ 2009 年 10 月 1 日发布的 qt-x11-opensource-src-4.5.3.tar.gz,大小 122 Mb. 2.解压缩 tar xvfz qt-x11-opensource-