检查hostname对应ip是否为本机ip

#include <stdlib.h>
#include <netdb.h>
#include <arpa/inet.h>
#include <vector>
#include <string>
#include <algorithm>
#include <unistd.h>
#include <cstring>

#define HOST_NAME_MAX 128
using namespace std;
bool
check_hosts (struct hostent *host, const vector<string>& ips)
{
	unsigned int cnt;
	for (cnt = 0; host->h_addr_list[cnt] != NULL; ++cnt)
	{
		char buf[INET6_ADDRSTRLEN]={0};

		const char *ip = inet_ntop (host->h_addrtype, host->h_addr_list[cnt],
							  buf, sizeof (buf));
		if(find(ips.begin(),ips.end(),string(ip)) != ips.end()){
			return true;
		};
	}
	return false;
}

bool is_local(char* hostname, const vector<string>& ips){
	int result = 0;
	struct hostent *host = NULL;
	char addr[INET6_ADDRSTRLEN]={0};

	if (inet_pton (AF_INET, hostname, &addr) || inet_pton (AF_INET6, hostname, &addr) ){
		return (find(ips.begin(),ips.end(),string(hostname)) != ips.end());
	}
	char hostname_buf[HOST_NAME_MAX]={0};
	if (gethostname(hostname_buf, HOST_NAME_MAX) == 0 && strcmp(hostname, hostname_buf) == 0){
		return true;
	}
	
	if ((host = gethostbyname2 (hostname, AF_INET)) != NULL && check_hosts(host, ips)){
		return true;
	}
	if ((host = gethostbyname2 (hostname, AF_INET6)) != NULL && check_hosts(host, ips)){
		return true;
	}
	return false;
}

int main (int argc, char* argv[]){
	vector<string> local_ips{
		"",
		"",
		""
	};
	return is_local(argv[1], local_ips);
} 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 可以在终端中输入以下命令来查看本机IP地址: ``` ifconfig ``` 或者也可以使用以下命令: ``` ip addr show ``` 无论哪个命令,都会列出本机所有的网络接口及其对应IP地址。通常来说,你需要找到名为“eth0”、“wlan0”或类似名称的网络接口,然后查看其inet属性,即可找到对应IP地址。 ### 回答2: 在Linux系统中,可以使用以下命令来查看本机IP地址: 1. ifconfig命令:最常用的命令之一,可以显示和配置网络接口的信息。输入ifconfig命令后,会列出所有网络接口的详细信息,包括IP地址、子网掩码、广播地址等。例如,如果要查看eth0接口的IP地址,可以使用命令ifconfig eth0。 2. ip命令:用于显示和配置网络设备和路由表。输入ip addr命令,会列出所有网络接口的详细信息,包括IP地址、子网掩码、广播地址等。例如,如果要查看eth0接口的IP地址,可以使用命令ip addr show dev eth0。 3. hostname命令:这个命令可以用来显示或设置主机名和域名。输入hostname -I命令,会显示本机IP地址。该命令会返回一个或多个IP地址,每个IP地址之间用空格分隔。 4. netstat命令:用于网络统计信息和连接状态的检查。输入netstat -rn命令,会显示系统的路由表信息。其中,通过查找默认路由信息中的“0.0.0.0”记录,可以找到本机IP地址。 综上所述,以上命令都可以用来查看Linux系统下的本机IP地址。选择其中一种命令进行输入,即可得到所需结果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值