扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
public class Player {
在绥德等地区,都构建了全面的区域性战略布局,加强发展的系统性、市场前瞻性、产品创新能力,以专注、极致的服务理念,为客户提供网站制作、成都网站设计 网站设计制作按需网站开发,公司网站建设,企业网站建设,品牌网站设计,全网整合营销推广,成都外贸网站制作,绥德网站建设费用合理。
// 模拟交战
public static void Engage(){
System.out.println("战斗开始!");
new Player("悟空",200,50,10).Attack(new Player("八戒",300,40,6));
System.out.println("战斗结束!");
}
// 名字
private String name;
// 生命值
private int hp;
// 伤害
private int damage;
// 护甲
private int armor;
public Player(String name,int hp,int damage,int armor){
this.name = name;
this.hp = hp;
this.damage = damage;
this.armor = armor;
}
public String GetName(){
return this.name;
}
// 进攻
public void Attack(Player target){
System.out.println(String.format("%1$s正在攻击%2$s!",this.GetName(),target.GetName()));
target.HurtFrom(this, this.damage);
}
// 反击
public void CounterAttack(Player enemy){
System.out.println(String.format("%1$s正在反击%2$s!",this.GetName(),enemy.GetName()));
this.Attack(enemy);
}
// 计算伤害
public void HurtFrom(Player enemy,int damage){
int realDamage = damage - this.armor;
this.hp = this.hp - realDamage;
System.out.println(String.format("%1$s受到%2$s的攻击,伤害%3$s,真实伤害%4$s,当前血量%5$s!",this.GetName(),enemy.GetName(),damage,realDamage,this.hp));
if(this.hp50)
System.out.println(String.format("哈哈,%1$s快死了!", this.GetName()));
if(this.hp 0){
System.out.println(String.format("%1$s已死亡!", this.GetName()));
return;
}
this.CounterAttack(enemy);
}
}
public class Application {
public static void main(String[] args) {
// 模拟交战
Player.Engage();
}
}
// 战斗记录
/*
战斗开始!
悟空正在攻击八戒!
八戒受到悟空的攻击,伤害50,真实伤害44,当前血量256!
八戒正在反击悟空!
八戒正在攻击悟空!
悟空受到八戒的攻击,伤害40,真实伤害30,当前血量170!
悟空正在反击八戒!
悟空正在攻击八戒!
八戒受到悟空的攻击,伤害50,真实伤害44,当前血量212!
八戒正在反击悟空!
八戒正在攻击悟空!
悟空受到八戒的攻击,伤害40,真实伤害30,当前血量140!
悟空正在反击八戒!
悟空正在攻击八戒!
八戒受到悟空的攻击,伤害50,真实伤害44,当前血量168!
八戒正在反击悟空!
八戒正在攻击悟空!
悟空受到八戒的攻击,伤害40,真实伤害30,当前血量110!
悟空正在反击八戒!
悟空正在攻击八戒!
八戒受到悟空的攻击,伤害50,真实伤害44,当前血量124!
八戒正在反击悟空!
八戒正在攻击悟空!
悟空受到八戒的攻击,伤害40,真实伤害30,当前血量80!
悟空正在反击八戒!
悟空正在攻击八戒!
八戒受到悟空的攻击,伤害50,真实伤害44,当前血量80!
八戒正在反击悟空!
八戒正在攻击悟空!
悟空受到八戒的攻击,伤害40,真实伤害30,当前血量50!
悟空正在反击八戒!
悟空正在攻击八戒!
八戒受到悟空的攻击,伤害50,真实伤害44,当前血量36!
哈哈,八戒快死了!
八戒正在反击悟空!
八戒正在攻击悟空!
悟空受到八戒的攻击,伤害40,真实伤害30,当前血量20!
哈哈,悟空快死了!
悟空正在反击八戒!
悟空正在攻击八戒!
八戒受到悟空的攻击,伤害50,真实伤害44,当前血量-8!
哈哈,八戒快死了!
八戒已死亡!
战斗结束!
*/
般cc攻击都是针对网站的域名进行攻击,比如网站域名是“xxx”,那么攻击者就在攻击工具中设定攻击对象为该域名然后实施攻击。
对于这样的攻击措施是在ⅡS上取消这个域名的绑定,让CC攻击失去目标。具体操作步骤是:打开“ⅡS管理器”定位到具体站点右键“属性”打开该站点的属性面板,点击IP地址右侧的“高级”按钮,选择该域名项进行编辑,将“主机头值”删除或者改为其它的值(域名)。
实例模拟测试,取消域名绑定后Web服务器的CPU马上恢复正常状态,通过IP进行访问连接一切正常。但是不足之处也很明显,取消或者更改域名对于别人的访问带来了不便,另外,对于针对IP的CC攻击它是无效的,就算更换域名攻击者发现之后,他也会对新域名实施攻击。
域名欺骗解析
如果发现针对域名的CC攻击,可以把被攻击的域名解析到127.0.0.1这个地址上。知道127.0.0.1是本地回环IP是用来进行网络测试的,如果把被攻击的域名解析到这个IP上,就可以实现攻击者自己攻击自己的目的,这样他再多的肉鸡或者代理也会宕机,让其自作自受。另外,当Web服务器遭受CC攻击时把被攻击的域名解析到国家有权威的政府网站或者是网警的网站,让其网警来收拾他们。现在一般的Web站点都是利用类似“新网”这样的服务商提供的动态域名解析服务,大家可以登录进去之后进行设置。
更改Web端口
一般情况下Web服务器通过80端口对外提供服务,因此攻击者实施攻击就以默认的80端口进行攻击,所以,我们可以修改Web端口达到防CC攻击的目的。运行ⅡS管理器,定位到相应站点,打开站点“属性”面板,在“网站标识”下有个TCP端口默认为80,我们修改为其他的端口就可以了。
ⅡS屏蔽IP
我们通过命令或在查看日志发现了CC攻击的源IP,就可以在ⅡS中设置屏蔽该IP对Web站点的访问,从而达到防范ⅡS攻击的目的。在相应站点的“属性”面板中,点击“目录安全性”选项卡,点击“IP地址和域名现在”下的“编辑”按钮打开设置对话框。在此窗口中我们可以设置“授权访问”也就是“白名单”,也可以设置“拒绝访问”即“黑名单”。比如我们可以将攻击者的IP添加到“拒绝访问”列表中,就屏蔽了该IP对于Web的访问。
IPSec封锁
IPSec是优秀的系统防火墙,在排除其他还有别的类型的DDOS攻击时,针对CC攻击可以用设置IP策略来对付攻击。以219.128.*.43这个IP为例子,笔者实际操作对该IP的访问封锁。
第一步:“开始→管理工具”,打开“本地安全设置”,右键点击“IP安全策略,在本地机器”选择“创建IP安全策略”,然后点击“下一步”,输入策略“名称”和“描述”。然后默认一路“下一步”创建了一个名为“封CC攻击”的IPSec策略。
第二步:右键点击“IP安全策略,在本地机器”选择“管理IP筛选器表和筛选器操作”,在打开的窗口中点“添加”,在“IP 筛选器列表”窗口添人同第一步的名称和描述信息。取消“使用添加向导”的勾选,然后点击“添加”。在“IP 筛选器 属性”窗口的“地址”选项下设置“源地址”为“192.168.1.6”,目标地址为“我的IP地址”,取消对“镜像”的勾选;点击“协议”选项卡,设置“协议类型”为“TCP”,设置“协议端口”为“从任意端口”到“此端口80”最后确定退出。
第三步:在“新规则 属性”窗口中点选刚才创建的“封CC攻击”规则,点击“筛选器操作”选项卡下的“添加”,点选“安全措施”下的“阻止”,在“常规”选项卡下为该筛选器命名为“阻止CC攻击”然后确定退出。
第四步:点选刚才创建的“阻止CC攻击”筛选器,一路“确定”退出IP策略编辑器,可以看到在组策略窗口的中创建成功一个名为“封CC攻击”的策略,然后右键点击该策略选择“指派”。这样就实现了对该IP的封锁。
防火墙
除了利用上述方法外,还可以通过第三方的防火墙进行防范,打开防护墙防火墙可以了,笔者以天鹰ddos防火墙为例进行演示。安装好天鹰ddos防火墙即可开启防护,傻瓜式配置界面,默认参数即可防护网站,误封较少,智能识别蜘蛛。
防CC攻击
使用加速乐云防火墙,若遇到CC攻击时,将自动启动,可以在2分钟内快速确定攻击IP,并封锁IP,完全拦截CC攻击。
反序列化顾名思义就是用二进制的形式来生成文件,由于common-collections.jar几乎在所有项目里都会被用到,所以当这个漏洞被发现并在这个jar包内实现攻击时,几乎影响了一大批的项目,weblogic的中枪立刻提升了这个漏洞的等级(对weblogic不熟悉的可以百度)。
至于如何使用这个漏洞对系统发起攻击,举一个简单的例子,我通过本地java程序将一个带有后门漏洞的jsp(一般来说这个jsp里的代码会是文件上传和网页版的SHELL)序列化,将序列化后的二进制流发送给有这个漏洞的服务器,服务器会自动根据流反序列化的结果生成文件,然后就可以大摇大摆的直接访问这个生成的JSP文件把服务器当后花园了。
如果Java应用对用户输入,即不可信数据做了反序列化处理,那么攻击者可以通过构造恶意输入,让反序列化产生非预期的对象,非预期的对象在产生过程中就有可能带来任意代码执行。
所以这个问题的根源在于类ObjectInputStream在反序列化时,没有对生成的对象的类型做限制;假若反序列化可以设置Java类型的白名单,那么问题的影响就小了很多。
public class AutoLion {
public static void main(String[] args) {
int ahp=200,bhp=200,a1=0;
for (int i = 1; i =202; i++) {
int ag=(int)(Math.random()*30);
if(i%2==0){
ahp=ahp-ag;
System.out.println("a被攻击 受到伤害"+ag);
}else{
bhp=bhp-ag;
System.out.println("b被攻击 受到伤害"+ag);
}
if(ahp==0){
a1++;
break;
}else if(bhp==0)
break;
}
if (a10) {
System.out.println("b胜利");
}else{
System.out.println("a胜利");
}
}
}
不知道你要什么效果。但你的要求应该是满足老
package test;
class A{
private int life;
private int aggress;
private int recovery;
public A(int life, int aggress, int recovery) {
super();
this.life = life;
this.aggress = aggress;
this.recovery = recovery;
}
public int getLife() {
return life;
}
public void setLife(int life) {
this.life = life;
}
public int getAggress() {
return aggress;
}
public void setAggress(int aggress) {
this.aggress = aggress;
}
public int getRecovery() {
return recovery;
}
public void setRecovery(int recovery) {
this.recovery = recovery;
}
}
class B{
private int life;//生命
private int aggress;//攻击
private int recovery;//防御
public B(int life, int aggress, int recovery) {
super();
this.life = life;
this.aggress = aggress;
this.recovery = recovery;
}
public int getLife() {
return life;
}
public void setLife(int life) {
this.life = life;
}
public int getAggress() {
return aggress;
}
public void setAggress(int aggress) {
this.aggress = aggress;
}
public int getRecovery() {
return recovery;
}
public void setRecovery(int recovery) {
this.recovery = recovery;
}
}
public class Demo {
public static void main(String[] args) {
A a=new A(100,20,10);
B b=new B(100,30,5);
//都有生命开始攻击
while(a.getLife()0b.getLife()0){
System.out.println("a攻击");
//如果a的攻击小于b的防御生命不变,否则修改
if(a.getAggress()=b.getRecovery()){
b.setLife(b.getLife());
}else{
b.setLife(b.getLife()-(a.getAggress()-b.getRecovery()));
}
if(b.getLife()=0){
//b死亡终止,输出a的生命
System.out.println("b死亡");
System.out.println("a的生命"+a.getLife());
break;
}
//ab剩下的生命
System.out.println("a的生命"+a.getLife());
System.out.println("b的生命"+b.getLife());
System.out.println("-------------");
System.out.println("b攻击");
//b破不了防
if(b.getAggress()=a.getRecovery()){
a.setLife(a.getLife());
}else{
a.setLife(a.getLife()-(b.getAggress()-a.getRecovery()));
}
if(a.getLife()=0){
System.out.println("a死亡");
System.out.println("b的生命"+b.getLife());
break;
}
System.out.println("a的生命"+a.getLife());
System.out.println("b的生命"+b.getLife());
}
}
}
写的有点冲忙,应该对你还是有帮助的,有问题就问
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流