Qt获取本机IP地址

一、从JS获取本机IP地址

Js获取本机IP地址的方法主要是通过向外发送请求,然后通过请求的IP地址和响应得到本机IP地址。

代码示例:


function getIPAdress()
{
    var script = document.createElement('script');
    script.src = 'https://api.ipify.org?format=jsonp&callback=getIP';
    document.body.appendChild(script);
}
function getIP(response)
{
    console.log('IP address:', response.ip);
}

上述代码先创建一个script元素,然后在其src属性中加入对IP查询请求的地址,并指定回调函数为getIP。接下来在当前页面中添加这个元素,浏览器会自动向IP查询请求发出请求,并返回数据,在此数据中包含了本机的IP地址,最后通过getIP函数对其进行处理。

二、Qt获取本机IP地址

1.获取本机IP地址

在Qt中获取本机IP地址,可以直接使用Qt提供的API获取。

代码示例:


#include <QNetworkInterface>

QList<QHostAddress> list = QNetworkInterface::allAddresses();
foreach (QHostAddress address, list)
{
    if (address.protocol() == QAbstractSocket::IPv4Protocol && address != QHostAddress(QHostAddress::LocalHost))
    {
        qDebug() << address.toString();
    }
}

首先,通过QNetworkInterface::allAddresses()方法可以获取该主机所有的网卡地址信息,并将其存放在QList中。接着通过迭代器对这个QList进行遍历处理,过滤出IPv4协议类型,并且地址不为本地地址的所有项,返回的数据是QHostAddress类型,通过其tostring()方法可以获取到IPv4地址的字符串形式,即本机IP地址。

2.获取本机主机名

在对本机IP地址进行操作时,有时还需要获取本机的主机名。在Qt中也可以轻松获取到本机主机名。

代码示例:


#include <QHostInfo>

QString hostname = QHostInfo::localHostName();
qDebug() << hostname;

首先,通过QHostInfo::localHostName()方法可以获取当前主机的主机名,即本机的主机名。由于此方法返回的是QString类型的主机名,因此通过qDebug()函数,将主机名打印到控制台上。

三、获取本机IP地址的其他方法

1.使用C获取本机IP地址

除了使用Qt自带的API之外,我们还可以使用C语言的API获取到本机IP地址。

代码示例:


#include <stdio.h>
#include <string.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>

int main()
{
    int i;
    int sockfd;
    char buf[1024];
    struct ifconf ifconf;
    struct ifreq *ifreq;

    sockfd = socket(AF_INET, SOCK_DGRAM, 0);
    if (sockfd  0; i--)
    {
        printf("adapter name: %s\n", ifreq->ifr_name);
        printf("IP address: %s\n", inet_ntoa(((struct sockaddr_in *)&(ifreq->ifr_addr))->sin_addr));

        ifreq++;
    }

    close(sockfd);

    return 0;
}

代码实现的功能是,创建一个套接字,然后通过ioctl()函数来调用系统接口获取该主机所有的网卡信息,最后对这些信息进行遍历,并过滤出IPv4协议类型,并打印该地址的字符串表示形式,即本机IP地址。

2.使用Socket获取本机IP地址

通过Socket获取本机IP地址,主要是通过建立连接来获取本机IP地址。

代码示例:


#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>

int main()
{
    int sockfd;
    struct sockaddr_in server;

    memset(&server, 0, sizeof(server));
    server.sin_family = AF_INET;
    server.sin_port = htons(8000);
    server.sin_addr.s_addr = htonl(INADDR_ANY);

    sockfd = socket(AF_INET, SOCK_STREAM, 0);
    if (sockfd < 0)
    {
        perror("socket");
        return -1;
    }

    if (bind(sockfd, (struct sockaddr *)&server, sizeof(server)) == -1)
    {
        perror("bind");
        return -1;
    }

    if (listen(sockfd, 5) == -1)
    {
        perror("listen");
        return -1;
    }

    struct sockaddr_in client;
    int addrlen = sizeof(client);
    int new_fd = accept(sockfd, (struct sockaddr *)&client, &addrlen);
    if (new_fd < 0)
    {
        perror("accept");
        return -1;
    }

    char ip[32];
    printf("IP address: %s\n", inet_ntop(AF_INET, &client.sin_addr.s_addr, ip, sizeof(ip)));

    close(new_fd);
    close(sockfd);

    return 0;
}

代码实现的功能是,首先创建一个服务器端的套接字,并将其绑定在一个端口上,然后调用listen()函数来监听端口的请求。接着,使用accept()函数,处理客户端请求,然后获取客户端的IP地址,并将其打印在控制台上。

3.使用awk实现获取本机IP地址

我们也可以使用awk工具来获取本机IP地址。

代码示例:


ifconfig | awk '/inet addr/{print substr($2,6)}'

该命令会使用ifconfig命令来获取所有地址信息,并通过awk来进行过滤,最终打印出IPv4地址的字符串表示形式,即本机IP地址。

四、Qt获取本地IP地址

在Qt中,我们可以使用QHostAddress::LocalHost来获取本地IP地址。

代码示例:


#include <QHostAddress>

QHostAddress address = QHostAddress::LocalHost;
qDebug() << address.toString();

该代码通过QHostAddress::LocalHost获取到本地IP地址的QHostAddress类型实例,将其打印为IPv4地址的字符串形式。

原创文章,作者:NUCMF,如若转载,请注明出处:https://www.506064.com/n/330503.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
NUCMFNUCMF
上一篇 2025-01-16 15:46
下一篇 2025-01-16 15:46

相关推荐

  • cmd看地址

    本文将从多个方面详细阐述cmd看地址,包括如何查看本机IP地址、如何查看路由器IP、如何查看DNS服务器IP等等。 一、查看本机IP地址 要查看本机IP地址,首先需要打开cmd窗口…

    编程 2025-04-29
  • 尚硅谷官网地址用法介绍

    尚硅谷是国内一家领先的技术培训机构,提供了众多IT职业的培训,包括Java、Python、大数据、前端、人工智能等方向。其官网地址为http://www.atguigu.com/。…

    编程 2025-04-29
  • Qt雷达探测教程

    本文主要介绍如何使用Qt开发雷达探测程序,并展示一个简单的雷达探测示例。 一、环境准备 在开始本教程之前,需要确保你的开发环境已经安装Qt和Qt Creator。如果没有安装,可以…

    编程 2025-04-29
  • Centos7配置静态ip

    本文将详细阐述如何在Centos7系统中配置静态ip。 一、查看网络接口 在配置静态ip之前,我们首先需要查看系统中的网络接口,以确定我们需要配置的网卡是哪一个。 ifconfig…

    编程 2025-04-29
  • Python检测IP连通

    Python是一门强大的编程语言,常用于网络开发、数据分析等领域。IP地址是网络通信的基础,在网络通信中,有时需要检测IP地址是否连通。下面将从多个方面介绍Python检测IP连通…

    编程 2025-04-28
  • Idea2022变更Git地址

    本文将从以下几个方面对Idea2022变更Git地址进行详细阐述: 一、GitHub上修改Git仓库地址 1、登录GitHub,找到需要修改的Git仓库 2、在代码页面点击右上角的…

    编程 2025-04-28
  • Treck TCP/IP Stack 输入验证错误漏洞CVE-2020-11901解析

    本文将对Treck TCP/IP Stack 输入验证错误漏洞CVE-2020-11901进行详细解析,并提供相关代码示例。 一、漏洞背景 Treck TCP/IP Stack是一…

    编程 2025-04-27
  • Qt State Machine与状态机模式

    本文将介绍Qt State Machine和状态机模式在Qt中的实现。Qt提供了QStateMachine和QState两个类,可以方便地实现状态机模式,并且能有效地处理复杂的、多…

    编程 2025-04-27
  • electron-egg打包后请求地址错误解决方法用法介绍

    本文将从多个方面对electron-egg打包后请求地址错误进行详细阐述,并给出解决方法。 一、electron-egg打包后请求地址错误的表现 在使用 electron-egg …

    编程 2025-04-27
  • PHP获取301跳转后的地址

    本文将为大家介绍如何使用PHP获取301跳转后的地址。301重定向是什么呢?当我们访问一个网页A,但是它已经被迁移到了另一个地址B,此时若服务器端做了301重定向,那么你的浏览器在…

    编程 2025-04-27

发表回复

登录后才能评论