我是靠谱客的博主 怕黑衬衫,最近开发中收集的这篇文章主要介绍检查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);
} 

最后

以上就是怕黑衬衫为你收集整理的检查hostname对应ip是否为本机ip的全部内容,希望文章能够帮你解决检查hostname对应ip是否为本机ip所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(157)

评论列表共有 0 条评论

立即
投稿
返回
顶部