C++ / Qt:如何检测主机名或IP地址何时引用当前系统?
C++ / Qt: How can I detect when a hostname or IP address refers to the current system?
我正在使用Qt编写一个macOS C++应用程序,它同时充当UDP客户端和UDP服务器。服务器功能允许用户配置将在哪个端口上接收 UDP 数据包,客户端功能允许指定目标主机和端口号。主机可以是主机名或 IP 地址,包括解析为多播或广播地址的地址或主机名。
为了帮助防止循环,当启用服务器功能时,我需要能够在用户为客户端输入的主机和端口将数据包直接发送到应用程序的服务器时发出警告。当然,检查端口号是否匹配很容易,但这意味着我需要知道他们输入的主机是否是指当前系统。
通常有问题的主机名或 IP 地址示例:
127.0.0.1
localhost
192.168.1.255
(假设系统位于192.168.1.0/24
子网上(- 分配给当前系统网络接口的任何 IP 地址
- 系统的本地 DNS 名称
- 除
127.0.0.1
之外,可以配置的任何其他环路地址
我怎样才能检测到这一点?
由于这个应用程序是使用Qt编写的,因此专门使用Qt框架的解决方案将是理想的。但是,如果这是不可能的(因为Qt不能处理所有可能的用例(,那么特定于macOS的解决方案也可以使用。
QNetworkInterface 类应该提供您可能需要的最多信息。 您可以使用 QNetworkInterface::allAddresses(( 静态函数获取 IP 地址列表。
您还可以使用 QNetworkInterface::allInterfaces(( 获取所有接口的列表。
为 QNetworkInterface::allInterfaces(( 返回的每个 QNetworkInterface 调用 QNetworkInterface::addressEntries(( 将为您提供有关每个接口的地址条目的更多信息。
auto ifs = QNetworkInterface::allInterfaces();
foreach (auto interface , ifs){
auto addresses = interface.addressEntries();
foreach ( auto addy , addresses){
///play with the addy here.
}
}
您还可以使用 QDnsLookup 类针对要禁止的 IP 地址测试主机名。
相关文章:
- 将数组的地址分配给变量并删除
- 空基优化子对象的地址
- C++ 指针的内存地址和指向数组的内存地址如何相同?
- 何时在引用或唯一指针上使用移动语义
- 何时提供默认参数作为模板参数
- 在C++中打印指向不同基元数据类型的指针的内存地址
- 如何在c++程序中找到函数的地址
- 向量元素的引用地址与它所指向的向量元素的地址不同.为什么
- 被解释为低级别const的const对象的地址
- 将地址分配给本地指针后,公共对象的变量将消失
- C++-明确何时以及如何调用析构函数
- 为什么我在leetcode上收到AddressSanitizer:地址0x602000000058上的堆缓冲区溢出错误
- 内联程序集printf将整数解释为地址
- 为什么指针不写入类的地址?
- 如何在C++中获取该对象的类声明中对象的地址?
- 通过按地址访问变量
- 当一个新对象被分配到它的地址时,对象是否必须被销毁
- 函数名是c中该函数的第一条指令的地址吗
- C++ / Qt:如何检测主机名或IP地址何时引用当前系统?
- 常量引用函数参数的地址何时唯一?