当前位置: 首页 > news >正文

判断用户输入IP的合法性判断输入IP与本机IP是否在同一网段C++QT

目录

一、任务目标

二、判断用户输入IP的合法性

三、判断用户输入IP与本机IP是否在同一网段


一、任务目标

1、判断用户输入IP的合法性,例如是否不符合IP地址的正确格式;

2、判断用户输入IP与本机IP是否在同一网段;

3、使用C++和QT实现;

二、判断用户输入IP的合法性

#include <iostream>
#include <string>
#include <sstream>
#include <vector>bool isValidIPAddress(const std::string& ipAddress) {std::vector<int> ipSegments;std::istringstream iss(ipAddress);std::string segment;while (std::getline(iss, segment, '.')) {try {int value = std::stoi(segment);if (value < 0 || value > 255) {return false;}ipSegments.push_back(value);} catch (const std::exception& e) {return false;}}return ipSegments.size() == 4;
}int main() {std::string text = "192.168.1.3:502";size_t delimiterPos = text.find(':');std::string ipAddress = delimiterPos != std::string::npos ? text.substr(0, delimiterPos) : text;if (isValidIPAddress(ipAddress)) {std::cout << "The IP address is valid." << std::endl;} else {std::cout << "The IP address is invalid." << std::endl;}return 0;
}

三、判断用户输入IP与本机IP是否在同一网段

//使用Visual Studio
//项目属性->"Qt Project Settings"->"Qt Modules"->勾选"network"
#include <QtNetwork/QNetworkInterface>
#include <QtNetwork/QNetworkAddressEntry>
#include <QtNetwork/QAbstractSocket>//获取本机IP
QHostAssress hostIP()
{auto list = QNetworkInterface::allInterfaces();foreach(QNetworkInterface interface,list){//1、首先判断是不是以太网,过滤Wifiif(interface.type() != QNetworkInterface::Ethernet)continue;//2、如果有安装虚拟机VMware,会出现虚拟网卡,需要过滤if(interface.humanReadableName().contains("VMware"))continue;//3、一般会有两个IP地址,一ipv4一个ipv6,过滤ipv6foreach(auto entry,interface.addressEntries()){if(entry.ip().protocol() == QAbstractSocket::IPv4Protocol)return entry.ip();}}return QHostAddress();
}int main()
{//获取本机IPQHostAddress LocalIP = hostIP();QString ipAddress = LocalIP.toString();std::string text = ipAddress.toStdString();//获取本机网段值int extractedInt = -1;std::string delimiter = ".";std::vector<std::string> tokens;std::string token;std::istringstream tokenStream(text);while (std::getline(tokenStream, token, '.')) {tokens.push_back(token);}if (tokens.size() >= 3) {std::string extracted = tokens[2];extractedInt = std::stoi(extracted);}//获取用户输入IP的网段值std::string InputIP = "192.168.1.3:502";int extractedInt2 = -2;std::vector<std::string> tokens2;std::string token2;std::istringstream tokenStream2(InputIP);while (std::getline(tokenStream2, token2, '.')) {tokens2.push_back(token2);}if (tokens2.size() >= 3) {std::string extracted2 = tokens2[2];extractedInt2 = std::stoi(extracted2);}//判断用户输入的IP是否与本机IP在同一网段if(extractedInt == extractedInt2){std::cout<<"在同一网段"<<std::endl;}else{std::cout<<"不在同一网段"<<std::endl;}return 0;
}

上述两项功能可以结合在一起使用,在“判断用户输入IP的合法性”后“判断用户输入IP与本机IP是否在同一网段”。

上述功能因笔者使用场景为QT的交互界面所以用到了QT的QtNetwork模块。

//上述代码为笔者在网页编写,如有错误望及时提出,感谢!

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【中项】系统集成项目管理工程师-第4章 信息系统架构-4.3应用架构
  • (7) cmake 编译C++程序(二)
  • PyTorch 深度学习实践-循环神经网络(高级篇)
  • React--Redux
  • 多维时序 | Transformer+BiLSTM多变量时间序列预测(Python)
  • HAL库源码移植与使用之RTC时钟
  • 时间和空间复杂度
  • Docker、containerd、CRI-O 和 runc 之间的区别
  • 第1关 -- Linux 基础知识
  • AV1技术学习:Transform Coding
  • LeetCode:x的平方根(C语言)
  • Android 自定义系统版本号
  • 数学建模(5)——逻辑回归
  • 『大模型笔记』LLM秘密:温度、Top-K和Top-P抽样技术解析!
  • 服务器相关总结
  • 【技术性】Search知识
  • Android系统模拟器绘制实现概述
  • CNN 在图像分割中的简史:从 R-CNN 到 Mask R-CNN
  • EOS是什么
  • iOS筛选菜单、分段选择器、导航栏、悬浮窗、转场动画、启动视频等源码
  • Java 最常见的 200+ 面试题:面试必备
  • JavaScript类型识别
  • oldjun 检测网站的经验
  • React 快速上手 - 06 容器组件、展示组件、操作组件
  • storm drpc实例
  • 从0到1:PostCSS 插件开发最佳实践
  • 翻译 | 老司机带你秒懂内存管理 - 第一部(共三部)
  • 基于HAProxy的高性能缓存服务器nuster
  • 前端攻城师
  • 区块链将重新定义世界
  • 容器服务kubernetes弹性伸缩高级用法
  • 使用 QuickBI 搭建酷炫可视化分析
  • 数据结构java版之冒泡排序及优化
  • 异步
  • 运行时添加log4j2的appender
  • Linux权限管理(week1_day5)--技术流ken
  • 正则表达式-基础知识Review
  • # Redis 入门到精通(一)数据类型(4)
  • #QT(智能家居界面-界面切换)
  • (70min)字节暑假实习二面(已挂)
  • (C语言)球球大作战
  • (MonoGame从入门到放弃-1) MonoGame环境搭建
  • (附源码)ssm智慧社区管理系统 毕业设计 101635
  • (论文阅读32/100)Flowing convnets for human pose estimation in videos
  • (十六)一篇文章学会Java的常用API
  • (五)大数据实战——使用模板虚拟机实现hadoop集群虚拟机克隆及网络相关配置
  • (一)ClickHouse 中的 `MaterializedMySQL` 数据库引擎的使用方法、设置、特性和限制。
  • (一)u-boot-nand.bin的下载
  • (一)UDP基本编程步骤
  • (原創) 未来三学期想要修的课 (日記)
  • (转)可以带来幸福的一本书
  • ***测试-HTTP方法
  • .apk 成为历史!
  • .NET 事件模型教程(二)
  • .NET连接MongoDB数据库实例教程