Linux whois命令C/C++实现及WHOIS协议抓包分析

在Linux系统中,WhoIs命令用于查询域名和IP地址的所有权信息。通过运行whois命令,可以获取到关于域的详细资料,包括注册商、域状态等。文章介绍了如何使用whois命令进行查询,例如查询域名信息、IP地址信息,以及如何指定端口查询。此外,还讲解了WHOIS协议的工作原理,涉及TCP端口43上的请求和响应过程。最后,提到了WHOIS协议的抓包分析,帮助理解数据包交互。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在类 Unix /LInux操作系统上, Whois 是域名和所有者的列表。有许多称为注册机构的互联网公司持有有关域名注册和所有权的数据。任何人都可以通过实际管理域名注册和所有权的 ICANN查询此信息。在本文中,我们将学习如何在 Linux 中使用 WhoIs 命令并且抓包进行分析。

whois命令

whois 是一个有用的 Linux 命令,可让您轻松获取有关域或网站的详细信息。可以在 Linux 中运行此命令来查找有关域的信息。我先看看whois命令如何使用?

whois 查询会告诉你很多关于谁拥有互联网域的信息。 在 Linux 上,你可以从命令行运行 whois 查找。


whois 系统是一个记录列表,其中包含有关域所有权和所有者的详细信息。任何人都可以查询记录列表。当你运行后,其中一个注册机构将处理您的请求并从相应的 whois 记录中向你发送详细信息。

此注册附有以下状态:

clientTransferProhibited:域的注册机构将拒绝将域从当前注册机构转移到另一个注册机构的请求。
serverDeleteProhibited:无法删除域。
serverTransferProhibited:域不能转移到另一个注册商。
serverUpdateProhibited:无法更新域

“域状态”行显示了域的状态,并且可以同时处于多个状态。

  • 实例
    1.查询域名信息

2.使用带有 IP 地址的 whois

使用带有 IP 地址的 whois 就像使用带有域名一样简单。 只需在 whois 后面指定一个 IP 地址。

3.指定端口查询


更多whois的使用说明可以使用man whois命令进行查看。


Linux whois命令C/C++实现

int main(int argc, char *argv[])
{
	int ch, flags, rval;
	const char *host, *name, *country;

	country = host = NULL;
	flags = rval = 0;
	while ((ch = getopt(argc, argv, "Aac:dfgh:Iilmp:PqQRr")) != -1)
		switch (ch) {
		case 'a':
			host = ANICHOST;
			break;
		case 'A':
			host = PNICHOST;
			break;
		case 'c':
			country = optarg;
			break;
		case 'd':
			host = DNICHOST;
			break;
		case 'f':
			host = FNICHOST;
			break;
		case 'g':
			host = GNICHOST;
			break;
		case 'h':
			host = optarg;
			break;
		case 'i':
			host = INICHOST;
			break;
		case 'I':
			host = IANAHOST;
			break;
		case 'l':
			host = LNICHOST;
			break;
		case 'm':
			host = MNICHOST;
			break;
		case 'p':
			port_whois = optarg;
			break;
		case 'P':
			host = PDBHOST;
			break;
		case 'q':
			break;
		case 'Q':
			flags |= WHOIS_QUICK;
			break;
		case 'r':
			host = RNICHOST;
			break;
		case 'R':
			host = RUNICHOST;
			break;
		default:
			usage();
		}
	argc -= optind;
	argv += optind;

	if (!argc || (country != NULL && host != NULL))
		usage();

	if (host == NULL && country == NULL && !(flags & WHOIS_QUICK))
		flags |= WHOIS_RECURSE;
	for (name = *argv; (name = *argv) != NULL; argv++) 
	{
			char *tofree = NULL;
			const char *server =
			    host ? host : choose_server(name, country, &tofree);
			rval += whois(name, server, port_whois, flags);
			free(tofree);
	}
	return rval;
}

运行结果:


WHOIS 服务器在 TCP 端口 43 上侦听来自 WHOIS 客户端的请求。 WHOIS 客户端向 WHOIS 服务器发出文本请求,然后 WHOIS 服务器回复文本内容。所有请求都以 ASCII CR 结束,然后是 ASCII LF。响应可能包含多于一行的文本,因此 ASCII CR 或 ASCII LF 字符的存在并不表 示响应结束。

WHOIS 服务器在输出完成后立即关闭其连接。关闭的 TCP 连接向客户端表明已收到响应。

WHOIS协议抓包分析

whois baidu.com

tcpdump -i ens33 -nn -s0 -v port 43

WHOIS 是一种基于 TCP 的面向事务的查询/响应协议,广泛用于向 Internet 用户提供信息服务。如果向位于 whois.nic.mil 的 WHOIS 服务器发出请求以获取有关“Smith”的信息,则线路上的数据包将如下所示:


总结

在本文中,我们学习了如何在 Linux 中使用 WhoIs 命令。 这是获取有关特定域或 IP 地址的信息的一种非常有用的方法。还有就是对WHOIS协议进行抓包分析。

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值