一、从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)
{
perror("socket");
return -1;
}
ifconf.ifc_len = sizeof(buf);
ifconf.ifc_buf = buf;
if (ioctl(sockfd, SIOCGIFCONF, &ifconf) == -1)
{
perror("ioctl");
return -1;
}
ifreq = (struct ifreq *)buf;
for (i = (ifconf.ifc_len / sizeof(struct ifreq)); i > 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地址的字符串形式。