一、從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