linux qt ping,Qt5.2中使用ping命令实现Ip扫描功能

在实现类似于Free IP Scanner 2.1的Ip扫描器软件中,会用到ping命令。如果使用Qt编程实现,主要会用QThread、QProcess这两个类。关于这两个类的具体用法可以查阅Qt助手或者QT官网。

在QT中为了扫描大量的Ip,通常需要将扫描Ip的任务放在一个单独的线程来完成,这样需要子类化QThread,重写其run()方法。从QThread类派生出一个ShellProcess的子类,该类的头文件代码如下:

#ifndef SHELLPROCESS_H

#define SHELLPROCESS_H

#include

#include

// Ping IP的线程子类

class ShellProcess : public QThread

{

Q_OBJECT

public:

explicit ShellProcess(QObject *parent = 0);

QStringList getIpRangle(); //获取需要扫描的IP列表

void setIpRange(QStringList ipRange); //设置需要扫描的IP列表

protected:

void run();

signals:

void commandSuccessed(QString ip);

void commandFailed(QString ip);

public slots:

private:

QStringList ipRange; //需要扫描的IP列表

};

#endif // SHELLPROCESS_H

ShellProcess类的实现代码如下:

#include "shellprocess.h"

#include

#include

ShellProcess::ShellProcess(QObject *parent) :

QThread(parent)

{

}

QStringList ShellProcess::getIpRangle()

{

return this->ipRange;

}

void ShellProcess::setIpRange(QStringList ipRange)

{

this->ipRange = ipRange;

}

void ShellProcess::run()

{

QString ip;

//依次扫描Ip列表中的各个IP

foreach( ip, ipRange )

{

int exitCode;

//对每个Ip执行ping命令检测其是否在线

qDebug() << "ping " + ip << endl;

#ifdef Q_OS_WIN

QString strArg = "ping " + ip + " -n 1 -i 2";

exitCode = QProcess::execute(strArg);

#else

//其他平台(Linux或Mac)

exitCode = QProcess::execute("ping", QStringList() << "-c 1" << "-t 2" << ip));

#endif

if(0 == exitCode)

{

//it's alive

qDebug() << "shell ping " + ip + " sucessed!";

//发射该IP在线的信号

emit commandSuccessed(ip);

} else {

qDebug() << "shell ping " + ip + " failed!";

//发射IP离线的信号

emit commandFailed(ip);

}

}

}

在实际编程中可以这样使用ShellProcess类:

#define THREAD_SIZE 10//线程数

ShellProcess *shellProcess;

for(int i=0;i

shellProcess= new ShellProcess(this);

connect(shellProcess, SIGNAL(commandSuccessed(QString)), this, SLOT(slot_onCommandSuccessed(QString)));

connect(shellProcess, SIGNAL(commandFailed(QString)), this, SLOT(slot_onCommandFailed(QString)));

connect(shellProcess, SIGNAL(finished()), shellProcess, SLOT(deleteLater()));

//设置每个线程的Ip扫描范围,一共10个线程

shellProcess->setIpRange(ip_in_thread[i]);

//启动线程

shellProcess->start();

}

具体的项目代码可以参看我github上使用Qt5.2的一个Ip扫描器:ip_scan,目前只完成了一部分功能。

另外,需要注意的是ping命令在Windows下和Linux(Mac)下的命令有所不同,可以参考Linux和Windows下ping命令详解1和Linux和Windows下ping命令详解2



本文同步分享在 博客“雪域迷影”(CSDN)。

如有侵权,请联系 support@oschina.cn 删除。

本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/461021.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python安装模块出错(ImportError: No module named setuptools)解决方法

原地址&#xff1a;http://www.cnblogs.com/BeginMan/archive/2013/05/28/3104928.html 在window平台下安装第三方模块时&#xff0c;出现这样的错误&#xff1a; Google了以下&#xff0c;才知道原来Python里少了这个模块。 我们可以在Python官网去查找 其中 Package Index中查…

kali linux 2.0 ssh,Kali 2.0使用SSH进行远程登录(示例代码)

一、配置SSH参数修改sshd_config文件&#xff0c;命令为&#xff1a;vim /etc/ssh/sshd_config将#PasswordAuthentication no的注释去掉&#xff0c;并且将NO修改为YES //kali中默认是yes将PermitRootLogin without-password修改为PermitRootLogin yes二、启动SSH服务命令为&am…

数据库课程设计报告

课程设计报告内容 封面&#xff08;注明组员及分工&#xff09; 目录 1&#xff0e;系统概述 – 系统的特点 – 系统设计环境 2&#xff0e;系统需求分析 – 系统设计的目标 – 系统需求分析&#xff08;给出&#xff1a;数据流图、数据字典&#xff09; – 系统功能…

基于Hi3516A的H265 IPC LIVE555 开发

转载于http://m.blog.csdn.net/faihung/article/details/73008742&#xff0c;如有侵权请告知删除。 1 系统工作原理 系统以Hi3516A开发平台&#xff08;由高分辨率1080 p的AR0330摄像头模块、带千兆以太网功能的Hi3516A控制器模块组成硬件平台&#xff0c;并在硬件平台上烧写了…

教材配套PPT初稿

1&#xff0d;10章初稿&#xff0c;基本完整。有些粗糙&#xff0c;后面可能会稍作调整。 附更新情况如下&#xff1a; 1.增加了第10章内容&#xff1b; 2.第5章增加了一些内容&#xff1b; 3.第3章内容部分更新&#xff1b; 4.增加了第8&#xff0d;9章内容。 订正&#xff1a…

linux ssh抓包,如何在SSH连接Linux系统的环境下使用wireshark抓包?

TSINGSEE青犀视频云边端架构EasyNVR、EasyDSS、EasyGBS等都是有两种操作系统的版本&#xff0c;一种是linux&#xff0c;一种是windows。而大多数开发者用户都会使用linux版本进行安装。对于安装部署出现的问题&#xff0c;TSINGSEE青犀视频团队研发的经常为客户远程调试&#…

Gearman 启动日志文件提示协议出错的BUG

如果直接以gearmand -d 启动 /usr/local/var/log/gearmand.log 里提示 Address family not supported by protocol ERROR 2014-11-20 20:05:49.000000 [ main ] socket()(Address family not supported by protocol) -> libgearman-server/gearmand.cc:468 ERROR 2014-11-20…

linux环境变量设置方法(PATH等环境变量)

以下内容源于网络资源的学习与整理&#xff0c;如有侵权请告知删除。 linux系统的环境变量有很多&#xff0c;这里简单介绍几个常见环境变量的设置方法。 环境变量PATH 这个环境变量&#xff0c;表示“可执行程序的查找路径”。 1、查看PATH的值&#xff0c;输入“echo $PATH”…

ASP.NET后台调用前台JS函数的三种常见方法

为什么80%的码农都做不了架构师&#xff1f;>>> 第一种&#xff1a;使用普通的添加控件中的Attributes属性进行调用 例如&#xff0c;像一般的普通的按钮&#xff1a;Button1.Attributes.Add("onclick","MyFun();"); 此方法只能在Onload中或者…

Android基础知识大纲

原文链接&#xff1a;http://android.eoe.cn/topic/overview * Android是什么&#xff1f;*版本&#xff1a;Android 4.0 r1原始页面&#xff1a;http://developer.android.com/guide/basics/what-is-android.htmlAndroid是一个移动设备的程序集合&#xff0c;包括的操作系统、…

linux unix shell programming,UnixampLinux Shell Programming I.ppt

《Unix&ampLinux Shell Programming I.ppt》由会员分享&#xff0c;可在线阅读&#xff0c;更多相关《Unix&ampLinux Shell Programming I.ppt(17页珍藏版)》请在人人文库网上搜索。1、Unix/Linux Shell Programming I,Dec 14th 2011 Shen Wei,Agenda,Unix/Linux Intro…

被遮挡的绝对定位 z-index

<div class”A” style”position:relative;”>A (relative) <div class”logo” style”position:absolute;z-index:99999;“></div> </div> <div class”B” style”position:relative;”>B (relative)</div> 最近做minisite项目时&…

嵌入式数据库sqlite在ARM上的的移植和使用

参考SQLite的编译、安装和使用_whz_zb的博客-CSDN博客&#xff0c;如有侵权&#xff0c;请告知删除。 参考&#xff1a;头文件路径问题 Linux下的头文件搜索路径 - 心哲 - 博客园 参考&#xff1a;进一步学习资源 SQlite - 标签 - likebeta - 博客园 一、源码获取 SQLite Do…

贪心法

贪心法的证明 —归纳证明&#xff1a; —贪心法使用的条件是&#xff1a;最优子结构和贪心选择正确性 —贪心算法是一步一步实现的&#xff0c; —在归纳证明的时候&#xff0c;贪心的第一步贪心选择策略的正确性就是归纳基础&#xff0c;因为以后都是一个子问题的选取&#xf…

第一季5:Hi3518EV200的环境搭建

以下内容源于朱有鹏嵌入式课程的学习与整理&#xff0c;如有侵权请告知删除。 一、内容总结 本文讲述如何安装交叉编译工具链&#xff0c;与编译源码得到uboot、kernel、rootfs镜像文件。 &#xff08;1&#xff09;安装交叉编译工具链&#xff0c;主要是通过执行osdrv/opensou…

Linux下WPS自主设置快捷键,电脑wps的word怎么自主设定快捷键

打开Word2003&#xff0c;点击“工具”选项卡&#xff0c;在下拉菜单中选择“自定义”栏。在弹出的“自定义”页面框中选择“键盘”。在弹出的“自定义键盘”页面框中选择你要设置快捷的命令&#xff0c;比如办公族在这里选择了“字体”里的“幼圆体”这个命令当前并没有快捷键…

登录和操作员管理

在MainWindow的Loaded中弹出登录对话框&#xff0c;如果没有登录则Application.Current.Shutdown()退出。 密码的MD5加盐处理&#xff0c;把盐值放在app.config的AppSetting中。 登录正确性判断&#xff0c;错误次数超过三次锁定 登录成功把当前用户Id放到Application.Current.…

Android动画的实现 上

在Android系统中也能经常见到动画&#xff0c;那么如何实现动画效果呢&#xff1f;本文就来为大家介绍动画的实现方式。 Android中动画的实现分两种方式&#xff0c;一种方式是补间动画Tween Animation&#xff0c;就是说你定义一个开始和结束&#xff0c;中间的部分由程序运算…

第一季2:HI3518EV200的初体验(检测板子是否正常工作)

以下内容源于朱有鹏嵌入式课程的学习与整理&#xff0c;如有侵权请告知删除。 一、检测步骤 1、设置PC主机有线网卡的ip地址设为192.168.1.10&#xff0c;关闭防火墙。 2、虚拟机桥接到有线网卡&#xff0c;并设置虚拟机的静态ip地址为192.168.1.141。 3、在uboot控制台设置ub…

linux安装 redis,在linux中安装redis

本文中使用的系统是Ubantu 18.04因为我是第一次使用Linux系统&#xff0c;并不知道使用哪一款比较好&#xff0c;主要是因为Ubantu的界面很好看(笑)在使用linux安装redis之前遇到过几个小问题。在本文中写下来。我在使用window远程ssh连接linux时&#xff0c;出现access denied…