您的位置:首页 > 文旅 > 旅游 > c++判断lldp是否稳定示例代码

c++判断lldp是否稳定示例代码

2025/7/4 8:41:12 来源:https://blog.csdn.net/jjjxxxhhh123/article/details/142169006  浏览:    关键词:c++判断lldp是否稳定示例代码

#include
#include
#include
#include
#include
#include

// 模拟运行命令并获取输出的函数
std::string runCommand(const std::string& command) {
// 假设返回的是 LLDP 结果的字符串
// 你可以用 system() 或其他库函数来执行命令
return R"(
GigabitEthernet0/0/4 has 2 neighbor(s):
Neighbor index :1
Chassis ID :3cc7-867d-
Port ID :GigabitEthernet0/0/2
Expired time :95s

Neighbor index :2
Chassis ID :162c-e113-2f21
Port ID :eth1
Expired time :100s
)";
}

// 解析 LLDP 结果并返回邻居设备列表
struct NeighborInfo {
std::string chassisID;
std::string portID;
int expiredTime;
};

std::vector parseLldpResult(const std::string& result) {
std::vector neighbors;

// 使用正则表达式提取邻居设备的信息
std::regex neighborRegex(R"(Neighbor index\s+:\d+[\s\S]*?Chassis ID\s+:(\S+)[\s\S]*?Port ID\s+:(\S+)[\s\S]*?Expired time\s+:(\d+)s)");
std::smatch match;
std::string::const_iterator searchStart(result.cbegin());while (std::regex_search(searchStart, result.cend(), match, neighborRegex)) {NeighborInfo neighbor;neighbor.chassisID = match[1];neighbor.portID = match[2];neighbor.expiredTime = std::stoi(match[3]);neighbors.push_back(neighbor);searchStart = match.suffix().first;
}return neighbors;

}

// 检查 LLDP 数据是否稳定
bool isLldpDataStable(const std::vector& lastNeighbors, const std::vector& currentNeighbors) {
// 检查设备数量是否一致
if (lastNeighbors.size() != currentNeighbors.size()) {
return false;
}

// 检查每个邻居设备的Chassis ID和Port ID是否一致,以及过期时间是否趋于稳定
for (size_t i = 0; i < lastNeighbors.size(); ++i) {if (lastNeighbors[i].chassisID != currentNeighbors[i].chassisID ||lastNeighbors[i].portID != currentNeighbors[i].portID) {return false;}// 如果过期时间差异较大,说明数据还不稳定if (abs(lastNeighbors[i].expiredTime - currentNeighbors[i].expiredTime) > 5) {return false;}
}return true;

}

// 等待 LLDP 数据稳定的函数
std::vector waitForStableLldpData(int maxWaitTime = 30, int checkInterval = 2) {
std::vector lastNeighbors;
int elapsedTime = 0;

while (elapsedTime < maxWaitTime) {// 获取当前 LLDP 数据std::string result = runCommand("display lldp neighbor");std::vector<NeighborInfo> currentNeighbors = parseLldpResult(result);// 如果上次的数据和本次一致,并且邻居设备的过期时间稳定,则认为数据稳定if (!lastNeighbors.empty() && isLldpDataStable(lastNeighbors, currentNeighbors)) {return currentNeighbors; // 数据稳定,返回结果}lastNeighbors = currentNeighbors;std::this_thread::sleep_for(std::chrono::seconds(checkInterval));elapsedTime += checkInterval;
}// 超时处理,返回最后一次的结果
return lastNeighbors;

}

int main() {
std::vector neighbors = waitForStableLldpData();

if (neighbors.empty()) {std::cout << "未检测到稳定的 LLDP 数据。" << std::endl;
} else {std::cout << "获得稳定的 LLDP 数据:" << std::endl;for (const auto& neighbor : neighbors) {std::cout << "Chassis ID: " << neighbor.chassisID << ", Port ID: " << neighbor.portID << ", Expired time: " << neighbor.expiredTime << "s" << std::endl;}
}return 0;

}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com