DHCP协议-CSP认证

2024-08-23 05:12
文章标签 csp 认证 协议 dhcp

本文主要是介绍DHCP协议-CSP认证,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

    • DHCP协议

DHCP协议

stringstream的用法

image-20240822102304216

应用实践

#include<bits/stdc++.h>using namespace std;signed main()
{string s="wo shi wwl, also wlw";stringstream ss;ss<<s;while(ss>>s){if(s[s.size()-1]==',') s[s.size()-1]=' ';cout<<s<<endl;}return 0;
}
#include<iostream>
#include<cstring>
#include<algorithm>
#include<queue>
#include<vector> using namespace std;
const int MAXNAME=20;
int cnt=1;struct IP
{int id;int status;
}struct MESSAGE
{char send[MAXNAME];char rec[MAXNAME];char type[4];IP ip;int ddl;int start;
}mes[M];void predo()
{string s;getline(cin,s);stringstream ss;int start,ip,ddl;string send,rec,type;ss<<s;ss>>start,ss>>send,ss>>rec;ss>>type,ss>>ip,ss>>ddl;mes[cnt].start=start;mes[cnt].send=send;mes[cnt].rec=rec;mes[cnt].type=type;mes[cnt].ip=ip;mes[cnt].ddl=ddl;
}signed main()
{int N,Tdef,Tmax,Tmin;string H;cin>>N>>Tdef>>Tmax>>Tmin;cin>>H;int n;cin>>n;for(int i=1;i<=n;i++){predo();if(mes[cnt].send!=H&&mes[cnt].send!="*"){if(mes[cnt].type!="REQ") continue;}else if(mes[cnt].type!="REQ"||mes[cnt].type!="DIS"){continue;}else if(mes[cnt].send==H){if(mes[cnt].type=="DIS")continue;//在想一个怎么样能够很好判断是否占用的数据结构if(checkip(mes[cnt]))}else if(mes[cnt].send=="*"){if(mes[cnt].type!="DIS")continue;}cnt++;}return 0;
}
#include<iostream>
#include<cstring>
#include<algorithm>
#include<queue>
#include<vector> using namespace std;
const int MAXNAME=20,MAXN=1e4+10;int N,Tdef,Tmax,Tmin;
string H;int start,ip,ddl;
string send,rec,type;int cnt=1;struct MESSAGE
{char send[MAXNAME];char rec[MAXNAME];char type[4];IP ip;int ddllow;int ddlup;int start;
}mes[M];bool ips[MAXN];bool checkmes(int ip)
{if(ips[ip]){return true;}else{int unsenip=0,minip=0;for(int i=1;i<=N;i++){//判断完是否有未分配最小或者过期最小后需要把那个最小的成员变量全部更新;//怎么去更新?//一个ip的截止时间能否在一开始就算出来if(unsenip==0&&ips[i].start==0){unsenip=i;}if(minip==0&&ips[i].time<cnt){minip=i;}}int resip=0;if(unsenip){resip=unsenip;}if(minip){resip=minip;}if(!resip){ips[resip]=1;//mes[++cnt].ip=resip;//ip是一个结构体if(!ddl){mes[cnt].ddl=cnt+Tdef;}else{}mes[cnt].send=send;mes[cnt].rec=H;mes[cnt].type=type;mes[cnt].start=start;mes[cnt].ddllow=start+Tmin;mes[cnt].ddlup=start+Tmax;return true;}}return false;
}signed main()
{cin>>N>>Tdef>>Tmax>>Tmin;cin>>H;int n;cin>>n;for(int i=1;i<=n;i++){string s;getline(cin,s);stringstream ss;ss<<s;ss>>start,ss>>send,ss>>rec;ss>>type,ss>>ip,ss>>ddl;if(send!=H&&send!="*"){if(type!="REQ") continue;}else if(type!="REQ"||type!="DIS"){continue;}else if(send==H){if(type=="DIS")continue;//在想一个怎么样能够很好判断是否占用的数据结构if(!checkmes()) continue;}else if(send=="*"){if(type!="DIS")continue;}cnt++;}return 0;
}
#include<iostream>
#include<cstring>
#include<algorithm>
#include<queue>
#include<vector> using namespace std;
const int MAXNAME=20,MAXN=1e4+10;int N,Tdef,Tmax,Tmin;
string H;int start,ip,ddl;
string send,rec,type;int cnt=1;struct MESSAGE
{char send[MAXNAME];char rec[MAXNAME];char type[4];IP ip;int ddl;int start;
}mes[M];bool ips[MAXN];bool checkDISmes(int ip)
{if(ips[ip]){return true;}else{int unsenip=0,minip=0;for(int i=1;i<=N;i++){//判断完是否有未分配最小或者过期最小后需要把那个最小的成员变量全部更新;//怎么去更新?//一个ip的截止时间能否在一开始就算出来if(unsenip==0&&ips[i].start==0){unsenip=i;}if(minip==0&&ips[i].time<cnt){minip=i;}}int resip=0;if(unsenip){resip=unsenip;}if(minip){resip=minip;}if(!resip){ips[resip]=1;//mes[++cnt].ip=resip;//ip是一个结构体if(!ddl){mes[cnt].ddl=cnt+Tdef;}else{//如果请求的时间没有过长或者过短,都可以设置为读入的ddlif(cnt+Tmin<=ddl&&cnt+Tmax>=ddl){mes[cnt].ddl=ddl;}else{mes[cnt].ddl=0;}}//到此处处理完DIS报文再发送REQ报文的任务//对ip分成单独一个结构题的感觉愈加明显//mes应该不用分配结构体,只需要对其进行处理,然后分配ip//修改ip状态mes[cnt].send=send;mes[cnt].rec=H;mes[cnt].type=type;mes[cnt].start=start;return true;}}return false;
}signed main()
{cin>>N>>Tdef>>Tmax>>Tmin;cin>>H;int n;cin>>n;for(int i=1;i<=n;i++){string s;getline(cin,s);stringstream ss;ss<<s;ss>>start,ss>>send,ss>>rec;ss>>type,ss>>ip,ss>>ddl;if(send!=H&&send!="*"){if(type!="REQ") continue;}else if(type!="REQ"||type!="DIS"){continue;}else if(send==H){if(type=="DIS")continue;//在想一个怎么样能够很好判断是否占用的数据结构if(!checkDISmes()) continue;}else if(send=="*"){if(type!="DIS")continue;}cnt++;}return 0;
}

处理报文,分配IP,修改ip状态,那返回报文的部分需要怎么处理呢?

#include<iostream>
#include<cstring>
#include<algorithm>
#include<queue>
#include<vector> using namespace std;
const int MAXNAME=20,MAXN=1e4+10;int N,Tdef,Tmax,Tmin;
string H;int start,ip,ddl;
string send,rec,type;int T;int cnt=1;struct MESSAGE
{char send[MAXNAME];char rec[MAXNAME];char type[4];IP ip;int ddl;int start;
}mes[M];vector<int> ips[MAXN];bool checkREQmes()
{if(rec!=H){}
}bool checkDISmes()
{if(ips[ip].size){return true;}else{int unsenip=0,minip=0;for(int i=1;i<=cnt;i++){//判断完是否有未分配最小或者过期最小后需要把那个最小的成员变量全部更新;//怎么去更新?//一个ip的截止时间能否在一开始就算出来if(unsenip==0&&mes[i].ddl==0){unsenip=i;}if(minip==0&&ips[i].time<cnt){minip=i;}}int resip=0;if(unsenip){resip=unsenip;}if(minip){resip=minip;}if(!resip){ips[resip]=1;//mes[++cnt].ip=resip;//ip是一个结构体if(!ddl){mes[cnt].ddl=cnt+Tdef;}else{//如果请求的时间没有过长或者过短,都可以设置为读入的ddlif(cnt+Tmin<=ddl&&cnt+Tmax>=ddl){mes[cnt].ddl=ddl;}else{mes[cnt].ddl=0;}}//到此处处理完DIS报文再发送REQ报文的任务//对ip分成单独一个结构题的感觉愈加明显//mes应该不用分配结构体,只需要对其进行处理,然后分配ip//修改ip状态mes[cnt].send=send;mes[cnt].rec=H;mes[cnt].type=type;mes[cnt].start=start;ips[ip]=1;//向发送主机发送报文的结果就是在控制台打印出东西//归根结底还是ip是否能分配成功printf("%s %s %s %d %d\n",H,send,"OFR",start,ddl);cnt++;return true;}}return false;
}signed main()
{cin>>N>>Tdef>>Tmax>>Tmin;cin>>H;int n;cin>>n;for(int i=1;i<=n;i++){string s;getline(cin,s);stringstream ss;ss<<s;ss>>start,ss>>send,ss>>rec;ss>>type,ss>>ip,ss>>ddl;if(send!=H&&send!="*"){if(type!="REQ") continue;}else if(type!="REQ"&&type!="DIS"){continue;}else if(send==H){if(type=="DIS")continue;//在想一个怎么样能够很好判断是否占用的数据结构}else if(send=="*"){if(type!="DIS")continue;}if(type=="DIS"){if(!checkDISmes()) continue;}if(type=="REQ"){if(!checkREQmes()) continue;}T++;}return 0;
}

最终ac版

#include<iostream>
#include<cstring>
#include<algorithm>
#include<queue>
#include<vector> using namespace std;
const int MAXNAME=20,MAXN=1e4+10;int N,Tdef,Tmax,Tmin;
string H;int tc,ip,te;
string send,rec,type;int T;
int cnt=1;int m;struct IP
{int state; //0:为分配; 1:待分配; 2:占用; 3:过期 ;string user;int t;}ips[MAXN];/*
在到达该过期时刻时,若该地址的状态是待分配,
则该地址的状态会自动变为未分配,且占用者清空,
过期时刻清零;否则该地址的状态会由占用自动变为过期,
且过期时刻清零。处于未分配和过期状态的 IP 地址过期时刻为零,
即没有过期时刻。
*/void update()
{for(int i=1;i<=N;i++){if(ips[i].t&&ips[i].t<=tc){if(ips[i].state==1){ips[i].state=0;ips[i].user="";ips[i].t=0;}else{ips[i].state=3;ips[i].t=0;}}}
}//<发送主机> <接收主机> <报文类型> <IP 地址> <过期时刻>int get_ip_by_user(string s)
{for(int i=1;i<=N;i++){if(ips[i].user==s){return i;}}return 0;
}int get_ip_by_state(int state)
{for(int i=1;i<=N;i++){if(ips[i].state==state) return i;}return 0;
}void set1()
{for(int i=1;i<=N;i++){if(ips[i].user==send&&ips[i].state==1){ips[i].state=0;ips[i].user="";ips[i].t=0;}}
}signed main()
{cin>>N>>Tdef>>Tmax>>Tmin;cin>>H;cin>>m;while(m--){cin>>tc>>send>>rec>>type>>ip>>te;if(rec!=H&&rec!="*"){if(type!="REQ") continue;}if(type!="REQ"&&type!="DIS"){continue;}if((rec==H&&type=="DIS")||(rec=="*"&&type!="DIS")){continue;}//每读入一个报文,就有一个新的时刻,所以要更新//把过了时间的给去掉update();if(type=="DIS"){int k=get_ip_by_user(send);if(!k) k=get_ip_by_state(0);if(!k) k=get_ip_by_state(3);if(!k) continue;ips[k].state=1;ips[k].user=send;if(!te) ips[k].t=tc+Tdef;else{int delt=te-tc;delt=min(Tmax,delt);delt=max(Tmin,delt);ips[k].t=tc+delt;}cout<<H<<' '<<send<<' '<<"OFR"<<' '<<k<<' '<<ips[k].t<<endl;//printf("%s %s %s %d %d\n",send,rec,"OFR",k,ips[k].t);}else{//int k=get_ip_by_user(H);if(rec!=H){set1();continue;}if(!(ip>=1&&ip<=N&&ips[ip].user==send)){cout<<H<<' '<<send<<' '<<"NAK"<<' '<<ip<<' '<<0<<endl;//printf("%s %s %s %d %d\n",send,rec,"Nak",k,ips[k].t);//continue;}else{ips[ip].state=2;if(!te) ips[ip].t=tc+Tdef;else{int delt=te-tc;delt=min(Tmax,delt);delt=max(Tmin,delt);ips[ip].t=tc+delt;}cout<<H<<' '<<send<<' '<<"ACK"<<' '<<ip<<' '<<ips[ip].t<<endl;//printf("%s %s %s %d %d\n",send,rec,"Ack",k,ips[k].t);}}}return 0;
}

这篇关于DHCP协议-CSP认证的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1098443

相关文章

浅析Spring Security认证过程

类图 为了方便理解Spring Security认证流程,特意画了如下的类图,包含相关的核心认证类 概述 核心验证器 AuthenticationManager 该对象提供了认证方法的入口,接收一个Authentiaton对象作为参数; public interface AuthenticationManager {Authentication authenticate(Authenti

【Linux】应用层http协议

一、HTTP协议 1.1 简要介绍一下HTTP        我们在网络的应用层中可以自己定义协议,但是,已经有大佬定义了一些现成的,非常好用的应用层协议,供我们直接使用,HTTP(超文本传输协议)就是其中之一。        在互联网世界中,HTTP(超文本传输协议)是一个至关重要的协议,他定义了客户端(如浏览器)与服务器之间如何进行通信,以交换或者传输超文本(比如HTML文档)。

CSP 2023 提高级第一轮 CSP-S 2023初试题 完善程序第二题解析 未完

一、题目阅读 (最大值之和)给定整数序列 a0,⋯,an−1,求该序列所有非空连续子序列的最大值之和。上述参数满足 1≤n≤105 和 1≤ai≤108。 一个序列的非空连续子序列可以用两个下标 ll 和 rr(其中0≤l≤r<n0≤l≤r<n)表示,对应的序列为 al,al+1,⋯,ar​。两个非空连续子序列不同,当且仅当下标不同。 例如,当原序列为 [1,2,1,2] 时,要计算子序列 [

【Kubernetes】K8s 的安全框架和用户认证

K8s 的安全框架和用户认证 1.Kubernetes 的安全框架1.1 认证:Authentication1.2 鉴权:Authorization1.3 准入控制:Admission Control 2.Kubernetes 的用户认证2.1 Kubernetes 的用户认证方式2.2 配置 Kubernetes 集群使用密码认证 Kubernetes 作为一个分布式的虚拟

【Go】go连接clickhouse使用TCP协议

离开你是傻是对是错 是看破是软弱 这结果是爱是恨或者是什么 如果是种解脱 怎么会还有眷恋在我心窝 那么爱你为什么                      🎵 黄品源/莫文蔚《那么爱你为什么》 package mainimport ("context""fmt""log""time""github.com/ClickHouse/clickhouse-go/v2")func main(

2024.9.8 TCP/IP协议学习笔记

1.所谓的层就是数据交换的深度,电脑点对点就是单层,物理层,加上集线器还是物理层,加上交换机就变成链路层了,有地址表,路由器就到了第三层网络层,每个端口都有一个mac地址 2.A 给 C 发数据包,怎么知道是否要通过路由器转发呢?答案:子网 3.将源 IP 与目的 IP 分别同这个子网掩码进行与运算****,相等则是在一个子网,不相等就是在不同子网 4.A 如何知道,哪个设备是路由器?答案:在 A

Modbus-RTU协议

一、协议概述 Modbus-RTU(Remote Terminal Unit)是一种基于主从架构的通信协议,采用二进制数据表示,消息中的每个8位字节含有两个4位十六进制字符。它主要通过RS-485、RS-232、RS-422等物理接口实现数据的传输,传输距离远、抗干扰能力强、通信效率高。 二、报文结构 一个标准的Modbus-RTU报文通常包含以下部分: 地址域:单个字节,表示从站设备

CSP-J基础之数学基础 初等数论 一篇搞懂(一)

文章目录 前言声明初等数论是什么初等数论历史1. **古代时期**2. **中世纪时期**3. **文艺复兴与近代**4. **现代时期** 整数的整除性约数什么样的整数除什么样的整数才能得到整数?条件:举例说明:一般化: 判断两个数能否被整除 因数与倍数质数与复合数使用开根号法判定质数哥德巴赫猜想最大公因数与辗转相除法计算最大公因数的常用方法:举几个例子:例子 1: 计算 12 和 18

【Shiro】Shiro 的学习教程(二)之认证、授权源码分析

目录 1、背景2、相关类图3、解析3.1、加载、解析阶段3.2、认证阶段3.3、授权阶段 1、背景 继上节代码,通过 debug 进行 shiro 源码分析。 2、相关类图 debug 之前,先了解下一些类的结构图: ①:SecurityManager:安全管理器 DefaultSecurityManager: RememberMeManager:实现【记住我】功能

网络原理之TCP协议(万字详解!!!)

目录 前言 TCP协议段格式 TCP协议相关特性 1.确认应答 2.超时重传 3.连接管理(三次握手、四次挥手) 三次握手(建立TCP连接) 四次挥手(断开连接)  4.滑动窗口 5.流量控制 6.拥塞控制 7.延迟应答 8.捎带应答  9.基于字节流 10.异常情况的处理 小结  前言 在前面,我们已经讲解了有关UDP协议的相关知识,但是在传输层,还有