Qt搜索本机网卡对应网段的在线设备
需求:销售给我的需求是找出哪些IP是没有被占用的,所以我要先找出已经被占用的IP
项目是Qt开发的,所以在网上搜索了下,搜索到的实现方式都是:QHostInfo::lookupHost,但是这种方式,我发现有部分已经占用了的IP还是搜索不出来,遂放弃这种方式。
// QHostInfo::lookupHost 方式搜索占用的IP-片段代码
QHostInfo::lookupHost("10.10.13.11", this, SLOT(lookedUp(QHostInfo))); void QWidget::lookedUp(const QHostInfo & host)
{
if (host.error() != QHostInfo::NoError) {
qDebug() << "Lookup failed:" << host.errorString();
return;
} // 如果IP地址和主机名不一致,就判断为占用了
if (host.addresses()[0].toString() != host.hostName())
{
qDebug() << "被占用了:" << host.addresses()[0].toString();
}
}
后面发现了其他的方式,比如,使用cmd(arp -a)命令,可以搜索出网段内占用的IP,发现这种方式好很多,不知道是不是百分百正确,但是觉得靠谱很多
正确的demo:
// 因为我的电脑安装有虚拟机,所有有多个网卡,为了其他函数调用方便,可以指定网卡,所以这里会搜索出所有的网卡
void wifiTestQtDemo::btn_sousuo_wangka()
{
ui.comboBox_wangka->clear();
face_list.clear();
/*QList<QNetworkInterface> */face_list = QNetworkInterface::allInterfaces();
for (int i = 0; i < face_list.count(); i++)
{
ui.comboBox_wangka->addItem(face_list.at(i).humanReadableName());
}
}
void wifiTestQtDemo::btn_sousuo_cmd()
{
auto address_list = face_list.at(ui.comboBox_wangka->currentIndex()).addressEntries();
for (int i = 0; i < address_list.count(); i++)
{
auto t_ip = address_list.at(i).ip();
if (t_ip.protocol() == QAbstractSocket::IPv4Protocol)
{
ui.edit_sousuo->setText(t_ip.toString());
break;
}
} // 获取本机网卡IP
QString IP = ui.edit_sousuo->text();
QStringList ip_list = IP.split("."); // 执行cmd命令
QProcess process;
process.start("arp -a");
process.waitForStarted();
process.waitForFinished();
QString cmd_res_text = QString::fromLocal8Bit(process.readAllStandardOutput()); QStringList sousuo_ip_list;
QStringList cmd_res_list = cmd_res_text.split("\r\n"); // 拆分成数组
for (int i = 0; i < cmd_res_list.size(); i++)
{
if (cmd_res_list.at(i).isEmpty()) { cmd_res_list.removeAt(i); } // 过滤空字符串
if (cmd_res_list.at(i).contains("---")) { cmd_res_list.removeAt(i); } // 过滤标头
if (cmd_res_list.at(i).contains("Internet")) { cmd_res_list.removeAt(i); } // 过滤无效数据
} // 解析出单个有效IP
for (int i = 0; i < cmd_res_list.size(); i++)
{
QStringList temp_ip_list = cmd_res_list.at(i).split(" ");
for (int j = 0; j < temp_ip_list.size(); j++)
{
if (!temp_ip_list.at(j).isEmpty()) { sousuo_ip_list.push_back(temp_ip_list.at(j)); break; }
}
} // 解析出正确的IP
cmd_res_list.clear();
cmd_res_list = sousuo_ip_list;
sousuo_ip_list.clear();
for (int i = 0; i < cmd_res_list.size(); i++)
{
QStringList temp_ip_list = cmd_res_list.at(i).split(".");
if (temp_ip_list.at(0) == ip_list.at(0) && temp_ip_list.at(1) == ip_list.at(1) && temp_ip_list.at(2) == ip_list.at(2))
{
sousuo_ip_list.push_back(cmd_res_list.at(i));
}
} // 调试打印
for each (auto s in sousuo_ip_list)
{
qDebug() << QString::fromLocal8Bit("被占用的IP: ") << s;
} // 解析数据,添加到下拉框
for (int i = 0; i < 256; i++)
{
ip_list.pop_back();
ip_list.push_back(QString::number(i));
QString temp_localhost_ip = ip_list.join(".");
if (sousuo_ip_list.contains(temp_localhost_ip)) { ui.comboBox_zaixian->addItem(temp_localhost_ip); }
else { ui.comboBox_keyong->addItem(temp_localhost_ip); }
} }
Qt搜索本机网卡对应网段的在线设备的更多相关文章
- Linux下多网卡同网段多IP网络分流设定方法
Linux下多网卡同网段多IP网络分流设定方法 -- :: 标签:Linux下多网卡同网段多IP网络分流设定方法 当服务器需要较高的网络流量时,在其它资源不造成瓶颈的情况下无疑会用到多网卡. 第1选项 ...
- Linux 双网卡双网段通信
/********************************************************************************* * Linux 双网卡双网段通信 ...
- OpenStack 虚机网卡的创建过程
原文链接:https://www.cnblogs.com/potato-chip/p/9127083.html OpenStack虚机网卡的创建过程 OpenStack最基本和常用的操作就是启动虚机. ...
- OpenStack虚机网卡的创建过程
OpenStack虚机网卡的创建过程 OpenStack最基本和常用的操作就是启动虚机.虚机启动的过程中涉及很多内容,其中非常重要的一个环节就是创建并绑定虚机的虚拟网卡.虚机的创建和管理是Nova的任 ...
- Qt获取本机IP地址
Qt获取本机IP地址: Qt版本:4.8.6 #include <QtNetwork/QNetworkInterface.h> QString ipAddr; QList<QHost ...
- 关闭防火墙和设置主机名和ip及克隆机网卡处理方法
关闭防火墙: service NetworkManager stop --图形化用ifconfig之前先关掉网络服务. chkconfig NetworkManager off (将开机自启动关掉,使 ...
- 经验分享:Linux 双网卡 不同网段 网络互通
环境如下: 现状:一台linux主机上有两个网卡eth0 和eth1 ,机器能访问192网的服务资源,但不能访问10网段的资源. 要求:linux能通过eth1访问10网段的资源 路由: 网卡: 操作 ...
- QT编写上位机程序一定要初始化变量以及谨慎操作指针
背景: 在编写QT上位机界面时,界面在运行的时候经常出现卡死或者直接挂掉的怪现象. 正文: 上位机有个函数为check_receive():该函数的作用为定时调用循环检测USB是否有数据.若有,则将信 ...
- Eureka客户端网卡和网段选择
当机器上有多个网卡或者机器上配置了回环地址的时候,Eureka客户端呈报给服务端的IP将不可预见,为了指定IP我们需要增加以下配置: 在bootstrap.yml中增加配置内容: spring: cl ...
- Linux 双网卡 不同网段 网络互通
环境如下: 现状:一台linux主机上有两个网卡eth0 和eth1 ,机器能访问192网的服务资源,但不能访问10网段的资源. 要求:linux能通过eth1访问10网段的资源 路由: 网卡: 操作 ...
随机推荐
- 安卓app设置背景音乐循环播放另有强制不能调节音量软件无法退出(仅供个人学习)
步进式调节:(直接调到那个音量): setStreamVolume (int streamType, int index, int flags) int streamType 需要调整的音量类型 ( ...
- 10、zookeeper客户端curator
curator介绍 https://blog.csdn.net/wo541075754/article/details/68067872 关于第三方客户端的小介绍 zkClient有对dubbo的一些 ...
- Codeforces Round 638 (Div. 2)B. Phoenix and Beauty
B. Phoenix and Beauty 这道题目学到的东西: 从给出的数据范围观察,得到一些有用信息(峰哥教的) 考虑无解的情况' 其实这题考虑怎么操作是比较难的,如果能想出来满足条件的结果就比较 ...
- spirmmvc框架整合手抄版示例,供基础搭建代码对照
注明所有文档和图片完整对照,辟免笔记出错,不能复习 package com.ithm.config; import com.alibaba.druid.pool.DruidDataSource; ...
- 视觉slam十四讲CH5 ---相机与图像
视觉slam十四讲 ---CH5 相机与图像 视觉slam中,作为主要传感器的相机自然起到着重要的作用,而相机拍摄的图像及其处理也是我们要做的工作之一. 1. 相机模型 单目相机的针孔模型 上图中的模 ...
- linux 前端 jenkins打包失败 permission 权限安装 root 安装nodejs,没有权限,另一个账号,需要chmod将文件权限打开
linux 前端 jenkins打包失败 permission 权限安装 root 安装nodejs,没有权限,另一个账号,需要chmod将文件权限打开 开始以为nodejs版本问题 最后发现是安装n ...
- 单词本z ctrl shift alt - tr踩踏 shi流出 al不同
单词本z ctrl shift alt ctrl = control = 控制 con = com = 一起 tr- = 踩 踏 - 原始印欧语形式为 *der- contra = 相对,相反(一起踩 ...
- 加载远程vue文件 vue3-sfc-loader
需求 项目在写一些需求的时候,现场可能会有些变动,但是不想从新打包,这种情况可以考虑单独不打包的vue文件 注意vue2 import { loadModule } from 'vue3-sfc-lo ...
- 关于hashCode和equals重写
规则 只要重写equals,就必须重写hashCode. 用Set存储对象或者用对象作为Map的键时,必须重写hashCode.也就是说,当需要用对象的哈希值来判断对象是否相等时必须重写hashCod ...
- [bzoj2120]数颜色/维护队列 (分块)
数颜色/维护队列 [做题笔记] 此生第一道不贺题解\(AC\)的分块蓝题!!! 题目描述 墨墨@hs_mo购买了一套 \(N\) 支彩色画笔(其中有些颜色可能相同),摆成一排,你需要回答墨墨的提问.墨 ...