从C++中的主机名获取计算机名
Get computername from hostname in C++?
IP地址为192.168.23.4
。我可以使用以下代码片段从ipad上获取主机名:
struct sockaddr_in sa;
char str[INET_ADDRSTRLEN];
inet_pton(AF_INET, "192.168.23.4", &(sa.sin_addr));
struct sockaddr_in saGNI;
char hostname[NI_MAXHOST];
char servInfo[NI_MAXSERV];
u_short port = 27015;
saGNI.sin_family = AF_INET;
saGNI.sin_addr.s_addr = sa.sin_addr.s_addr;
saGNI.sin_port = htons(port);
DWORD dwRetval = getnameinfo((struct sockaddr *) &saGNI,
sizeof(struct sockaddr),
hostname,
NI_MAXHOST, servInfo, NI_MAXSERV, NI_NUMERICSERV);
printf("HostName: %s", hostname);
我得到了表格的输出
ComputerName.domain.com
如何从主机名中获取Computername?
例如输入
ComputerName.domain.com
Eg输出
ComputerName
是否有任何方法可以直接获取已知IP地址的系统的ComputerName?
我正在寻找与在远程系统上使用Hostname命令显示的结果相同的结果。
查看getnameinfo 的手册页面
http://man7.org/linux/man-pages/man3/getnameinfo.3.html
根据手册页面,您应该设置NI_NOFQDN标志。
NI_NOFQDN
If set, return only the hostname part of the fully qualified
domain name for local hosts.
根据emirc的建议,以下代码正在打印计算机名:
struct sockaddr_in sa;
char str[INET_ADDRSTRLEN];
inet_pton(AF_INET, "192.168.23.4", &(sa.sin_addr));
struct sockaddr_in saGNI;
char hostname[NI_MAXHOST];
char servInfo[NI_MAXSERV];
u_short port = 27015;
saGNI.sin_family = AF_INET;
saGNI.sin_addr.s_addr = sa.sin_addr.s_addr;
saGNI.sin_port = htons(port);
DWORD dwRetval = getnameinfo((struct sockaddr *) &saGNI,
sizeof(struct sockaddr),
hostname,
NI_MAXHOST, servInfo, NI_MAXSERV, NI_NOFQDN);
printf("HostName: %s", hostname);
注意:我把旗从NI_NUMERICSERV
至
NI_NOFQDN
您的意思是,您想在第一个句点之前截断字符串吗?
std::string host(hostname);
size_t pos = host.find('.');
if (pos != std::string::npos)
{
host = host.substr(0,pos);
}
strcpy(hostname, host.c_str());
如果您有兴趣查找运行代码的计算机的主机名,Boost.Asio
可以简化任务:
#include <iostream>
#include <string>
#include <boost/asio.hpp>
int main() {
std::string hostname = boost::asio::ip::host_name();
std::cout << "hostname = " << hostname << std::endl;
}
请注意,这需要使用-lpthread
选项进行编译。
相关文章:
- 从C++中的主机名获取计算机名
- 我如何以不同的语言从qdatetime获取日名
- 如何从静态方法中获取类名
- 使用 winAPI 获取计算机工作时间
- 在网络C 上获取计算机的IP地址
- 运行时间错误:程序跳过提示,以获取第二名和第三个名称
- 如何使用QT获取计算机的本地IP地址
- 从 IP 获取主机名别名
- 如何从ip地址或sockaddr_in结构(C++/WinAPI)中获取主机名
- 使用 RegQueryValueEx 从注册表中获取计算机名称
- 获取主机名(C++)
- 如何从模板g++中获取变量名
- 获取计算机时间 c++
- 如何使用Qt获取主机名
- 编写一个程序,获取100名学生的数据并显示成绩表
- 如何获取计算机的唯一标识符
- 如何在clang::VarDecl中获取变量名的位置
- 在wxWidgets中获取键名
- 从USB设备的设备路径获取卷名
- GetComputerName返回值对于我的计算机名来说太短了.该怎么做