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/zh-tw/n/330503.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
NUCMF的頭像NUCMF
上一篇 2025-01-16 15:46
下一篇 2025-01-16 15:46

相關推薦

  • cmd看地址

    本文將從多個方面詳細闡述cmd看地址,包括如何查看本機IP地址、如何查看路由器IP、如何查看DNS伺服器IP等等。 一、查看本機IP地址 要查看本機IP地址,首先需要打開cmd窗口…

    編程 2025-04-29
  • Qt雷達探測教程

    本文主要介紹如何使用Qt開發雷達探測程序,並展示一個簡單的雷達探測示例。 一、環境準備 在開始本教程之前,需要確保你的開發環境已經安裝Qt和Qt Creator。如果沒有安裝,可以…

    編程 2025-04-29
  • 尚矽谷官網地址用法介紹

    尚矽谷是國內一家領先的技術培訓機構,提供了眾多IT職業的培訓,包括Java、Python、大數據、前端、人工智慧等方向。其官網地址為http://www.atguigu.com/。…

    編程 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
  • electron-egg打包後請求地址錯誤解決方法用法介紹

    本文將從多個方面對electron-egg打包後請求地址錯誤進行詳細闡述,並給出解決方法。 一、electron-egg打包後請求地址錯誤的表現 在使用 electron-egg …

    編程 2025-04-27
  • Qt State Machine與狀態機模式

    本文將介紹Qt State Machine和狀態機模式在Qt中的實現。Qt提供了QStateMachine和QState兩個類,可以方便地實現狀態機模式,並且能有效地處理複雜的、多…

    編程 2025-04-27
  • PHP獲取301跳轉後的地址

    本文將為大家介紹如何使用PHP獲取301跳轉後的地址。301重定向是什麼呢?當我們訪問一個網頁A,但是它已經被遷移到了另一個地址B,此時若伺服器端做了301重定向,那麼你的瀏覽器在…

    編程 2025-04-27

發表回復

登錄後才能評論