簡體   English   中英

如何使用 Qt c++ 獲取您的公共 ip 地址

[英]How to get your public ip address using Qt c++

我正在為網絡地址等計算器編寫一個 gui。 所有的編碼都完成了,但現在我想要一個按鈕來獲取您計算機的 ip 地址。 我正在尋找解決方案,並在stackoverflow上看到了各種帖子,但沒有一個對我有用......

編輯:這段代碼對我有用

QTcpSocket socket;
    socket.connectToHost("8.8.8.8", 53);
    if (socket.waitForConnected()) {
        QString text = socket.localAddress().toString();
        ui->ipAddress->setText(text);

    } else {
        QMessageBox msg;
        msg.setText("Couldn't connect to the DNS server! No internet connection...");
        msg.setWindowTitle("No internet connection");
        msg.setIcon(QMessageBox::Critical);
        msg.exec();
    }```

您可以為此目的使用 QHostInfo。 前任; 自動列表 = QHostInfo::fromName(QHostInfo::localHostName()).addresses();

我認為您正在尋找的 class 是QNetworkInterface class。

從手冊頁:

QNetworkInterface class 提供主機的 IP 地址和網絡接口的列表。

例如,調用QNetworkInterface::allAddresses()是獲取計算機上所有 IP 地址列表的快速方法。 至於哪個是“公共IP地址”,這不是一個明確的概念。 在大多數現代消費者設置中,可以說沒有公共 IP 地址,因為消費者 PC 通常隱藏在NAT層后面,因此唯一的公共 IP 地址位於網絡路由器上,而不是用戶計算機本身。

我在當前項目中使用以下代碼片段來獲取 ip 地址。 它在桌面 Linux 和嵌入式 Linux 上運行良好。 device是網絡接口名稱,如“wlan0”、“eth0”等。它返回包含 ip 和網絡掩碼的QNetworkAddressEntry 使用ip() function 得到 ip 地址。 通常第一個地址條目是非虛擬的,所以這就是為什么要獲得第一個。

const QNetworkInterface& networkInterface = QNetworkInterface::interfaceFromName(device);

if (networkInterface.isValid())
{
    const QList<QNetworkAddressEntry>& addressEntries = networkInterface.addressEntries();

    if (!addressEntries.isEmpty())
        return addressEntries.front();
}

return QNetworkAddressEntry(); // could not found, invalid adress entry

不要忘記將QT += network添加到您的專業文件中。

使用 QNetworkAccessManager,您可以點擊這個免費的 REST api: https://www.ipify.org/

它支持各種選項,例如在 json 中返回結果。 如果您只是得到url,它會以原始格式(即裸字符串)響應您最有可能希望返回的 ip 地址。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM