编写filter

 A.编写filter实现类的程序

Filter API包含3个接口:Filter FilterChain和FilterConfig 过滤器必须要实现Filter接口:

init():该method在容器实例化过滤器时被调用 它主要设计用于使filter处理作准备 container为此方法传递一个FilterConfig对象 其中包含配置信息

doFilter():filter用此方法单个用于处理request和response 此方法接受3个输入参数:ServletRequest response和一个FilterChain对象 FilterChain对于正确的过滤器操作至关重要 doFilter()方法必须调用FilterChain的doFilter()方法 除非该方法用来拦截以后的下游处理

destroy():该方法由container在销毁filter实例之前调用

编写一个filter--用来计算一个client的web请求所花的大致时间

PageTimerFilter.java

package cc.ejb.examples;

import java.io.IOException;
import java.io.StringWriter;
import java.io.PrintWriter;
import java.util.Date;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

public class PageTimerFilter implements Filter
{
    
private FilterConfig config = null;
    
    
public void init(FilterConfig config) throws ServletException
    
{
        
this.config = config;
    }

    
public void doFilter(ServletRequest request, ServletResponse response)
        
throws ServletException, java.io.IOException
        
{
            Date startTime, endTime;
            
double duration;
            startTime 
= new Date();
            
//Forward the request to the next resource in the chian
            chain.doFilter(request, response);

            
//Calculate the duration between the start time and end time
            endTime = new Date();
            duration 
= (endTime.getTime() - startTime.getTime())/1000;//Convert from milliseconds to seconds

            StringWriter sw 
= new StringWriter();
            PrintWriter out 
= new PrintWriter(sw);

            out.println();
            out.println(
"==========");
            out.println(
"Total elapsed time is:" + duration + "seconds.");
            out.println(
"==========");

            
//Log the resulting string
            out.flush();
            config.getServletContext().log(sw.getBuffer().toString());
        }

        
        
public viod destroy()
        
{
            
this.config = null;
        }

}

 在doFilter()方法实现中 出现在FilterChain的doFilter()方法调用之前的代码都被看作使预处理 web资源(包括其他filter Servlet等) 所做的处理还没有发生 而在该方法之后的代码则使后期处理 这时外发的响应信息已经包含了web资源的完整响应 也就是说 FilterChain的doFilter()将调用接下来的过滤器(在有链式关系的时候)或者其他web资源

在HTTP中间人攻击实验中,通过编写filter文件,可以对网页内容进行替换。如果您想替换百度网页的图片,可以按照以下步骤操作: 1. 编写filter文件,使用sed命令将网页中的图片链接替换成攻击者指定的图片链接。具体来说,可以将filter文件中的内容写成以下形式: ``` s/http:\/\/www\.baidu\.com\/img\//http:\/\/attackersite.com\/img\//g ``` 其中,`http:\/\/www\.baidu\.com\/img\/`表示百度网页图片的链接,`http:\/\/attackersite.com\/img\/`表示攻击者准备好的图片的链接。这个命令会将百度网页中所有的图片链接都替换成攻击者准备好的图片链接。 2. 在中间人攻击实验中,使用ettercap工具进行攻击。具体来说,可以使用以下命令启动ettercap工具: ``` ettercap -T -q -M arp:remote /网关IP/ /受害者IP/ ``` 其中,`/网关IP/`表示本地网络的网关IP地址,`/受害者IP/`表示受害者的IP地址。这个命令会将中间人攻击程序启动起来,并且将流量转发到目标主机上。 3. 在ettercap工具中,加载filter文件。具体来说,在ettercap的命令行界面中,可以使用以下命令加载filter文件: ``` etterfilter /path/to/filter/file ``` 其中,`/path/to/filter/file`表示filter文件的路径。这个命令会将filter文件加载到ettercap工具中,并且启用filter规则。 4. 在受害者主机上,打开浏览器并访问百度网站。此时,ettercap工具会拦截并篡改网页中的图片链接,将其替换成攻击者指定的图片链接。 需要注意的是,进行这种操作可能会侵犯他人的网络安全和个人隐私等问题,需要遵守相关法律法规。同时,这种操作也可能会影响网页的完整性和可用性,需要仔细考虑替换的内容和替换的方式,以免对网页造成不必要的影响。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值