精华内容
下载资源
问答
  • 转发

    2015-09-01 15:29:56
    1、什么是转发 一个Web组件(Servlet/JSP)将未完成的处理通过容器转交给另外一个Web组件继续完成 常见情况:一个Servlet获得数据之后(比如通过调用dao),将这些数据转发给一个JSP,由这个JSP来展现这些数据(比如,...

    1、什么是转发

    • 一个Web组件(Servlet/JSP)将未完成的处理通过容器转交给另外一个Web组件继续完成
    • 常见情况:一个Servlet获得数据之后(比如通过调用dao),将这些数据转发给一个JSP,由这个JSP来展现这些数据(比如,表格)

    2、如何实现转发

    • 绑定数据到request对象

    绑定数据

    • 获得转发器

    或得转发器

    • 转发
      转发

    3、转发的原理
    转发的原理

    4、转发的特点

    • 转发之后,地址栏地址不会发生变化。原因是转发的过程是发生在服务器内部的,浏览器并不知道。
    • 转发的目的地必须是同一个应用内部的某个地址转发所涉及的各个web组件会共享同一个request对象和response对象
    • 注意:在forward之后的其它语句还会执行吗? 答:一定会执行,只要不报异常

    5、转发和重定向的区别

    • 重定向是浏览器发送请求并受到响应以后再次向一个新地址发请求,转发是服务器受到请求后为了完成响应转到一个新的地址
    • 重定向中有两次请求对象,不共享数据,转发只产生一次请求对象且在组件间共享数据
    • 重定向后地址栏地址改变,而转发不会 重定向的新地址可以是任意地址,转发到的新地址必须是同一个应用内的某地址

    从下图可更直观看出区别:
    转发与重定向的区别

    展开全文
  • 转发和重定向区别详解 作为一名程序员,特别是java web开发的程序员,在使用servlet/jsp的时候,我们必须要知道实现页面跳转的两种方式的区别和联系:即转发和重定向的区别。 1、RequestDispatcher.forward方法...

    转发和重定向区别详解

            作为一名java web开发的程序员,在使用servlet/jsp的时候,我们必须要知道实现页面跳转的两种方式的区别和联系:即转发和重定向的区别。

          1、request.getRequestDispatcher().forward()方法,只能将请求转发给同一个WEB应用中的组件;而response.sendRedirect() 方法不仅可以重定向到当前应用程序中的其他资源,还可以重定向到同一个站点上的其他应用程序中的资源,甚至是使用绝对URL重定向到其他站点的资源。

    如果传递给response.sendRedirect()方法的相对URL以“/”开头,它是相对于整个WEB站点的根目录;如果创建request.getRequestDispatcher()对象时指定的相对URL以“/”开头,它是相对于当前WEB应用程序的根目录。

          2、重定向访问过程结束后,浏览器地址栏中显示的URL会发生改变,由初始的URL地址变成重定向的目标URL;请求转发过程结束后,浏览器地址栏保持初始的URL地址不变。

          3、HttpServletResponse.sendRedirect方法对浏览器的请求直接作出响应,响应的结果就是告诉浏览器去重新发出对另外一个URL的访问请求,这个过程好比有个绰号叫“浏览器”的人写信找张三借钱,张三回信说没有钱,让“浏览器”去找李四借,并将李四现在的通信地址告诉给了“浏览器”。于是,“浏览器”又按张三提供通信地址给李四写信借钱,李四收到信后就把钱汇给了“浏览器”。

    由此可见,重定向的时候,“浏览器”一共发出了两封信和收到了两次回复,“浏览器”也知道他借到的钱出自李四之手。

    request.getRequestDispatcher().forward()方法在服务器端内部将请求转发给另外一个资源,浏览器只知道发出了请求并得到了响应结果,并不知道在服务器程序内部发生了转发行为。这个过程好比绰号叫“浏览器”的人写信找张三借钱,张三没有钱,于是张三找李四借了一些钱,甚至还可以加上自己的一些钱,然后再将这些钱汇给了“浏览器”。

    由此可见,转发的时候,“浏览器”只发 出了一封信和收到了一次回复,他只知道从张三那里借到了钱,并不知道有一部分钱出自李四之手。

           4、request.getRequestDispatcher().forward()方法的调用者与被调用者之间共享相同的request对象和response对象,它们属于同一个访问请求和响应过程;

    而response.sendRedirect()方法调用者与被调用者使用各自的request对象和response对象,它们属于两个独立的访问请求和响应过程。对于同一个WEB应用程序的内部资源之间的跳转,特别是跳转之前要对请求进行一些前期预处理,并要使用HttpServletRequest.setAttribute方法传递预处理结果,那就应该使用request.getRequestDispatcher().forward()方法。不同WEB应用程序之间的重定向,特别是要重定向到另外一个WEB站点上的资源的情况,都应该使用response.sendRedirect()方法。

            5、无论是request.getRequestDispatcher().forward()方法,还是response.sendRedirect()方法,在调用它们之前,都不能有内容已经被实际输出到了客户端。如果缓冲区中已经有了一些内容,这些内容将被从缓冲区中。

    以上五点的论述来源于:点击查看原文论述

    转发和重定向的图解

    两种跳转获得对象的方式

    //获得转发对象getRequestDispatcher()
    HttpServletRequest(httpServletRequest).getRequestDispatcher
    ServletContext.getRequestDispatcher();
    
    //获得重定向对象sendRedirect()
    HttpServletResponse(httpServletResponse).sendRedirect();

    转发和跳转的小结

          1、转发使用的是getRequestDispatcher()方法;重定向使用的是sendRedirect();

          2、转发:浏览器URL的地址栏不变。重定向:浏览器URL的地址栏改变;

          3、转发是服务器行为,重定向是客户端行为;

          4、转发是浏览器只做了一次访问请求。重定向是浏览器做了至少两次的访问请求;

          5、转发2次跳转之间传输的信息不会丢失,重定向2次跳转之间传输的信息会丢失(request范围)。

    转发和重定向的选择

          1、重定向的速度比转发慢,因为浏览器还得发出一个新的请求,如果在使用转发和重定向都无所谓的时候建议使用转发。

          2、因为转发只能访问当前WEB的应用程序,所以不同WEB应用程序之间的访问,特别是要访问到另外一个WEB站点上的资源的情况,这个时候就只能使用重定向了。

    转发和重定向的应用场景

           在上面我已经提到了,转发是要比重定向快,因为重定向需要经过客户端,而转发没有。有时候,采用重定向会更好,若需要重定向到另外一个外部网站,则无法使用转发。另外,重定向还有一个应用场景:避免在用户重新加载页面时两次调用相同的动作。

           例如,当提交产品表单的时候,执行保存的方法将会被调用,并执行相应的动作;这在一个真实的应用程序中,很有可能将表单中的所有产品信息加入到数据库中。但是如果在提交表单后,重新加载页面,执行保存的方法就很有可能再次被调用。同样的产品信息就将可能再次被添加,为了避免这种情况,提交表单后,你可以将用户重定向到一个不同的页面,这样的话,这个网页任意重新加载都没有副作用;

           但是,使用重定向不太方便的地方是,使用它无法将值轻松地传递给目标页面。而采用转发,则可以简单地将属性添加到Model,使得目标视图可以轻松访问。由于重定向经过客户端,所以Model中的一切都会在重定向时丢失。但幸运的是,在Spring3.1版本以后,我们可以通过Flash属性,解决重定向时传值丢失的问题。

           要使用Flash属性,必须在Spring MVC的配置文件中添加一个<annotation-driven/>。然后,还必须再方法上添加一个新的参数类型:org.springframework.web.servlet.mvc.support.RedirectAttributes。

           如下所示:

    @RequestMapping(value="saveProduct",method=RequestMethod.POST)
    public String saveProduct(ProductForm productForm,RedirectAttributes redirectAttributes){
    
         //执行产品保存的业务逻辑等
      
         //传递参数
           redirectAttributes.addFlashAttribute("message","The product is saved successfully");
       
         //执行重定向
          return "redirect:/……";
    }

     

     

     

     

    展开全文
  • linux下用iptables做本机端口转发方法

    万次阅读 2015-01-15 11:06:02
    一 :从一台机到另一台机端口转发 启用网卡转发功能 #echo 1 > /proc/sys/net/ipv4/ip_forward 举例:从192.168.0.132:21521(新端口)访问192.168.0.211:1521端口 a.同一端口转发 (192.168.0.132上开通1521端口...

    本文根据众多互联网博客内容整理后形成,引用内容的版权归原始作者所有,仅限于学习研究使用

    拓扑图

    下来一个一般情况下公司内网和外网的拓扑图

     

    一、概要

    1、防火墙分类

          ①包过滤防火墙(pack filtering)在网络层对数据包进行选择过滤,采用访问控制列表(Access control table-ACL)检查数据流的源地址,目的地址,源和目的端口,IP等信息。
          ②代理服务器型防火墙

    2、iptables基础

          ①规则(rules):网络管理员预定义的条件
          ②链(chains): 是数据包传播的路径
          ③表(tables):内置3个表filter表,nat表,mangle表分别用于实现包过滤网络地址转换和包重构的功能
          ④filter表是系统默认的,INPUT表(进入的包),FORWORD(转发的包),OUTPUT(处理本地生成的包),filter表只能对包进行授受和丢弃的操作。
          ⑤nat表(网络地址转换),PREROUTING(修改即将到来的数据包),OUTPUT(修改在路由之前本地生成的数据包),POSTROUTING(修改即将出去的数据包)
          ⑥mangle表,PREROUTING,OUTPUT,FORWORD,POSTROUTING,INPUT

    3、其它

       iptables是按照顺序读取规则
       防火墙规则的配置建议
        Ⅰ 规则力求简单
        Ⅱ 规则的顺序很重要
        Ⅲ 尽量优化规则
        Ⅳ 做好笔记

    二、配置

    1、iptables命令格式

         iptables [-t 表] -命令 匹配 操作 (大小写敏感)
       动作选项
         ACCEPT          接收数据包
         DROP             丢弃数据包
         REDIRECT      将数据包重新转向到本机或另一台主机的某一个端口,通常功能实现透明代理或对外开放内网的某些服务
         SNAT             源地址转换
         DNAT             目的地址转换
         MASQUERADE       IP伪装
         LOG               日志功能

    2、定义规则

       ①先拒绝所有的数据包,然后再允许需要的数据包
          iptalbes -P INPUT DROP
          iptables -P FORWARD DROP
          iptables -P OUTPUT ACCEPT
       ②查看nat表所有链的规则列表
          iptables -t nat -L
       ③增加,插入,删除和替换规则
         iptables [-t 表名] <-A|I|D|R> 链名 [规则编号] [-i|o 网卡名称] [-p 协议类型] [-s 源ip|源子网] [--sport 源端口号] [-d 目的IP|目标子网] [--dport 目标端口号] [-j 动作]
        参数:-A 增加
                   -I 插入
                   -D 删除
                   -R 替换
     

    三、例子

    ①iptables -t filter -A INPUT -s 192.168.1.5 -i eth0 -j DROP
    禁止IP为192.168.1.5的主机从eth0访问本机②iptables -t filter -I INPUT 2 -s 192.168.5.0/24 -p tcp --dport 80 -j DROP
    禁止子网192.168.5.0访问web服务③iptables -t filter -I INPUT 2 -s 192.168.7.9 -p tcp --dport ftp -j DROP
    禁止IP为192.168.7.9访问FTP服务
    ④iptables -t filter -L INPUT
    查看filter表中INPUT链的规则
    ⑤iptables -t nat -F
    删除nat表中的所有规则
    ⑥iptables -I FORWARD -d wwww.playboy.com -j DROP
    禁止访问www.playboy.com网站
    ⑦iptables -I FORWARD -s 192.168.5.23 -j DROP
    禁止192.168.5.23上网

     

    下面详细介绍一下iptables的配置

    一 :从一台机到另一台机端口转发

    启用网卡转发功能
    #echo 1 > /proc/sys/net/ipv4/ip_forward

    举例:从192.168.0.132:21521(新端口)访问192.168.0.211:1521端口


    a.同一端口转发

    (192.168.0.132上开通1521端口访问 iptables -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 1521 -j ACCEPT)

    iptables -t nat -I PREROUTING -p tcp --dport 1521 -j DNAT --to 192.168.0.211
    iptables -t nat -I POSTROUTING -p tcp --dport 1521 -j MASQUERADE

    b.不同端口转发

    (192.168.0.132上开通21521端口访问 iptables -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 21521 -j ACCEPT)

    iptables -t nat -A PREROUTING -p tcp -m tcp --dport21521 -j DNAT --to-destination192.168.0.211:1521
    iptables -t nat -A POSTROUTING -s 192.168.0.0/16 -d 192.168.0.211 -p tcp -m tcp --dport 1521 -j SNAT --to-source 192.168.0.132

    以上两条等价配置(更简单[指定网卡]):
    iptables -t nat -A PREROUTING -p tcp -i eth0 --dport 31521 -j DNAT --to 192.168.0.211:1521
    iptables -t nat -A POSTROUTING -j MASQUERADE

    保存iptables
    #service iptables save
    #service iptables restart
     

    二 用iptables做本机端口转发

    代码如下:
       iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8080

    估计适当增加其它的参数也可以做不同IP的端口转发。

    如果需要本机也可以访问,则需要配置OUTPUT链(********特别注意:本机访问外网的端口会转发到本地,导致访不到外网,如访问yown.com,实际上是访问到本地,建议不做80端口的转发或者指定目的 -d localhost):
      iptables -t nat -A OUTPUT -d localhost -p tcp --dport 80 -j REDIRECT --to-ports 8080

    原因:
    外网访问需要经过PREROUTING链,但是localhost不经过该链,因此需要用OUTPUT。

    例子1:

    概述:

          有一些核心MYSQL服务器位于核心机房的内网段,经常需要去连接这些服务器,因无法直接通过外网访问,给管理造成了不便。
    思路:

          虽然解决此问题的方法及思路有很多,但当下想使用IPTABLES的端口重定向功能解决此问题,比较简单易用,而且扩展性也比较好,依次类推,可以运用到其他的端口转发方面的应用。
    网络环境:
    公网服务器      :eth0:公网IP    eth1:内网IP - 192.168.1.1
    MYSQL服务器:eth1:内网IP - 192.168.1.2

    实现方法:通过访问公网IP的63306端口来实现到内网MYSQL服务器的3306端口的访问
    在公网服务器上:
    配置脚本:
    iptables -t nat -A PREROUTING -p tcp --dport 63306 -j DNAT --to-destination 192.168.1.2:3306
    iptables -t nat -A POSTROUTING -d 192.168.1.2 -p tcp --dport 3306 -j SNAT --to 192.168.1.1

    允许服务器的IP转发功能:

    echo 1 > /proc/sys/net/ipv4/ip_forward
    使用方法:
    mysql -h 公网IP -p 63306 -uroot -p

    例子2:

         由于业务需要,服务器越来越多,内网服务器无外网环境管理甚是不便,所以折腾了一下外网到内网的端口转发以达到轻松管理的目的,贴一下心得。

    S1:
    eth0 10.0.0.1
    eth1 x.x.x.x

    S2:
    eth0 10.0.0.2

    S1 8082端口转发到内网机器22端口

    iptables规则配置如下:

    iptables -t nat -A PREROUTING -d x.x.x.x -p tcp --dport 8082 -j DNAT --to-destination 10.0.0.2:22

    iptables -t nat -A POSTROUTING -d 10.0.0.2 -p tcp --dport 22 -j SNAT --to-source x.x.x.x

    说明:
    iptables -t nat -A PREROUTING -d "对外公网ip" -p tcp --dport "对外端口" -j DNAT --to "内部实际提供服务的ip":"实际提供服务的端口"

    iptables -t nat -A POSTROUTING -d "内部实际提供服务的ip"-p tcp --dport "实际提供服务的端口" -j SNAT --to-source "运行iptables机器的内网ip"

     

    另外,网上看到一篇很好的文章,这里转发一下:https://icewing.cc/post/25-iptables-policy.html

    25个最常用的iptables策略

    1、清空存在的策略

    当你开始创建新的策略,你可能想清除所有的默认策略,和存在的策略,可以这么做:

    • iptables -F 或者iptables –flush

    2、设置默认策略

    默认链策略是ACCEPT,改变所有的链策略为DROP:

    • iptables -P INPUT DROP
    • iptables -P FORWARD DROP
    • iptables -P OUTPUT DROP

    3、阻止一个指定的ip

    • BLOCK_THIS_IP=“x.x.x.x"
    • iptables -A INPUT -s ”$BLOCK_THIS_IP“ -j DROP
    • iptables -A INPUT -i eth0 -s "$BLOCK_THIS_IP" -j DROP
    • iptables -A INPUT -i eth0 -p tcp -s "$BLOCK_THIS_IP" -j DROP

    4、允许SSH

    允许所有通过eth0接口使用ssh协议连接本机:

    • iptables -A INPUT -i eth0 -p tcp -dport 22 -m state -state NEW,ESTABLISHED -j ACCEPT
    • iptables -A OUTPUT -o eth0 -p tcp -sport 22 -m state -state ESTABLISHED -j ACCEPT

    5、允许某个网段通过ssh连接

    • iptables -A INPUT -i eth0 -p tcp -s 192.168.100.0/24 –dport 22 -m state -state NEW,ESTABLISHED -j ACCEPT
    • iptables -A OUTPUT -o eth0 -p tcp -sport 22 -m state –state ESTABLISHED -j ACCEPT

    6、允许SSH连接指定的网段

    • iptables -A OUTPUT -o eth0 -p tcp -d 192.168.100.0/24 -dport 22 -m state -state NEW,ESTABLISHED -j ACCEPT
    • iptables -A INPUT -i eth0 -p tcp -sport 22 -m state -state ESTABLISHED -j ACCEPT

    7、允许http和https

    允许所有进来的web流量:http协议80端口,https协议是443端口

    • iptables -A INPUT -i eth0 -p tcp -dport 80 -m state -state NEW,ESTABLISHED -j ACCEPT
    • iptables -A OUTPUT -o eth0 -p tcp -sport 80 -m state -state ESTABLISHED -j ACCEPT

     

    • iptables -A INPUT -i eth0 -p tcp -dport 443 -m state -state NEW,ESTABLISHED -j ACCEPT
    • iptables -A OUTPUT -o eth0 -p tcp -sport 443 -m state -state ESTABLISHED -j ACCEPT

    8、多个策略联合一起

    允许ssh,http,https:

    • iptables -A INPUT -i eth0 -p tcp -m multiport -dports 22,80,443 -m state -state NEW,ESTABLISHED -j ACCEPT
    • iptables -A OUTPUT -o eth0 -p tcp -m multiport -sports 22,80,443 -m state -state ESTABLISHED -j ACCEPT

    9、允许SSH连接其他主机

    • iptables -A OUTPUT -o eth0 -p tcp -dport 22 -m state -state NEW,ESTABLISHED -j ACCEPT
    • iptables -A INPUT -i eth0 -p tcp -sport 22 -m state -state ESTABLISHED -j ACCEPT

    10、允许https出去

    • iptables -A OUTPUT -o eth0 -p tcp -dport 443 -m state -state NEW,ESTABLISHED -j ACCEPT
    • iptables -A INPUT -i eth0 -p tcp -sport 443 -m state -state ESTABLISHED -j ACCEPT

    11、对web请求做负载均衡(每三个包,均衡到指定服务器,需要扩展iptables)

    • iptables -A PREROUTING -i eth0 -p tcp –dport 443 -m state -state NEW -m nth -counter 0 -every 3 -packet 0 -j DNAT -to-destination 192.168.1.101:443
    • iptables -A PREROUTING -i eth0 -p tcp –dport 443 -m state -state NEW -m nth -counter 0 -every 3 -packet 1 -j DNAT -to-destination 192.168.1.102:443
    • iptables -A PREROUTING -i eth0 -p tcp –dport 443 -m state -state NEW -m nth -counter 0 -every 3 -packet 2 -j DNAT -to-destination 192.168.1.103:443

    12、允许ping

    • iptables -A INPUT -p icmp -icmp-type echo-request -j ACCEPT
    • iptables -A OUTPUT -p icmp -icmp-type echo-reply -j ACCEPT

    13、允许ping远程

    • iptables -A OUTPUT -p icmp -icmp-type echo-request -j ACCEPT
    • iptables -A INPUT -p icmp -icmp-type echo-reply -j ACCEPT

    14、允许本地回环

    • iptables -A INPUT -i lo -j ACCEPT
    • iptables -A OUTPUT -o lo -j ACCEPT

    15、允许内网访问外部网络

    这个例子eth1 连接外部网络,eth0连接内部网络

    • iptables -A FORWARD -i eth0 -o eth1 -j ACCEPT

    16、允许DNS出去

    • iptables -A OUTPUT -p udp -o eth0 -dport 53 -j ACCEPT
    • iptables -A INPUT -p udp -i eth0 -sport 53 -j ACCEPT

    17、允许NIS连接

    NIS端口是动态的,当ypbind启动时它分配端口。

    首先运行 rpcinfo -p 显示得到端口号,这个例子使用端口850,853。

    • iptables -A INPUT -p tcp -dport 111 -j ACCEPT
    • iptables -A INPUT -p udp -dport 111 -j ACCEPT
    • iptables -A INPUT -p tcp -dport 853 -j ACCEPT
    • iptables -A INPUT -p udp -dport 853 -j ACCEPT
    • iptables -A INPUT -p tcp -dport 850 -j ACCEPT
    • iptables -A INPUT -p udp -dport 850 -j ACCEPT

    上面的例子当ypbind重新启动时将失效,有2种解决方案:

    (1) 分配nis服务静态ip

    (2) 使用精妙的脚本

    18、允许指定网段连接Rsync

    • iptables -A INPUT -i eth0 -p tcp -s 192.168.101.0/24 -dport 873 -m state -state NEW,ESTABLISHED -j ACCEPT
    • iptables -A OUTPUT -o eth0 -p tcp -sport 873 -m state -state ESTABLISHED -j ACCEPT

    19、允许mysql从指定的网段连接

    • iptables -A INPUT -i eth0 -p tcp -s 192.168.100.0/24 -dport 3306 -m state -state NEW,ESTABLISHED -j ACCEPT
    • iptables -A OUTPUT -o eth0 -p tcp -sport 3306 -m state -state ESTABLISHED -j ACCEPT

    20、允许sendmail或者postfix

    • iptables -A INPUT -i eth0 -p tcp -dport 25 -m state -state NEW,ESTABLISHED -j ACCEPT
    • iptables -A OUTPUT -o eth0 -p tcp -sport 25 -m state -state ESTABLISHED -j ACCEPT

    21、允许IMAP和IMAPS

    • iptables -A INPUT -i eth0 -p tcp -dport 143 -m state -state NEW,ESTABLISHED -j ACCEPT
    • iptables -A OUTPUT -o eth0 -p tcp -sport 143 -m state -state ESTABLISHED -j ACCEPT
    •  
    • iptables -A INPUT -i eth0 -p tcp -dport 993 -m state -state NEW,ESTABLISHED -j ACCEPT
    • iptables -A OUTPUT -o eth0 -p tcp -sport 993 -m state -state ESTABLISHED -j ACCEPT

    22、允许POP3和POP3S

    • iptables -A INPUT -i eth0 -p tcp -dport 110 -m state -state NEW,ESTABLISHED -j ACCEPT
    • iptables -A OUTPUT -o eth0 -p tcp -sport 110 -m state -state ESTABLISHED -j ACCEPT
    •  
    • iptables -A INPUT -i eth0 -p tcp -dport 995 -m state -state NEW,ESTABLISHED -j ACCEPT
    • iptables -A OUTPUT -o eth0 -p tcp -sport 995 -m state -state ESTABLISHED -j ACCEPT

    23、预防DDOS攻击

    • iptables -A INPUT -p tcp -dport 80 -m limit -limit 25/minute -limit-burst 100 -j ACCEPT
    • -m :使用iptables扩展
    • –limit 25/minute : 限制分钟连接请求数
    • –limit-burst:触发阀值,一次涌入数据包数量

    24、端口转发

    来自442的都转到22端口

    • iptables -t nat -A PREROUTING -p tcp -d 192.168.102.37 -dport 422 -j DNAT -to 192.168.102.37:22

    你还必须明确允许442端口

    • iptables -A INPUT -i eth0 -p tcp -dport 422 -m state -state NEW,ESTABLISHED -j ACCEPT
    • iptables -A OUTPUT -o eth0 -p tcp -sport 422 -m state -state ESTABLISHED -j ACCEPT

    25、包丢弃日志

    你也许想查看所有丢弃包的日志。首先创建一个新链叫 LOGGING

    • iptables -N LOGGING

    确保所有的连接跳到LOGGING

    • iptables -A INPUT -j LOGGING

    记录这些包通过自定义名字 "log-prefix"

    • iptables -A LOGGING -m limit -limit 2/min -j LOG -log-prefix "IPTables Packet Dropped:" -log-level 7

    最后丢弃这些数据包

    • iptables -A LOGGING -j DROP

    参考

    https://icewing.cc/post/25-iptables-policy.html

    https://www.jianshu.com/p/fd0e5ce233a7

     

    请我喝咖啡

    如果觉得文章写得不错,能对你有帮助,可以扫描我的微信二维码请我喝咖啡哦~~哈哈~~

     

    展开全文
  • 转发和重定向的区别和使用

    万次阅读 多人点赞 2019-03-19 15:26:24
    页面的跳转:转发 转发的原理 转发的方法 疑问 能否在OneServlet中保存值到请求域中,在另一个TwoServlet中打印出来? 如果是不同的请求,不能取出来。如果是同一次请求是可以取出来的。 转发与重定向的作用 ...

    页面的跳转:转发

    1. 转发的原理
    2. 转发的方法

    疑问

    • 能否在OneServlet中保存值到请求域中,在另一个TwoServlet中打印出来?

      如果是不同的请求,不能取出来。如果是同一次请求是可以取出来的。
      

    转发与重定向的作用

    在Servlet中实现页面的跳转有两种方式:转发和重定向

    什么是转发

    概念

    由服务器端进行的页面跳转

    原理图

    在这里插入图片描述
    转发的方法
    在这里插入图片描述

    案例

    需求

    ​ 实现从OneServlet中转发到TwoServlet

    步骤

    1. OneServlet向请求域中添加了一个键和值,转发给TwoServlet
    2. TwoServlet就从请求域中取出键和值,打印到浏览器上。

    效果

    在这里插入图片描述

    代码

    OneServlet
    package com.itheima.servlet;
    
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;
    import java.io.PrintWriter;
    
    /**
     与请求域相关的方法
     */
    @WebServlet(name = "Demo6OneServlet", urlPatterns = "/one")
    public class Demo6OneServlet extends HttpServlet {
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            response.setContentType("text/html;charset=utf-8");
            PrintWriter out = response.getWriter();
            out.print("这是One<br/>");
            //向请求域中添加键和值
            request.setAttribute("name","Jack");
            request.setAttribute("age", 20);  //整数类型
            String name = (String) request.getAttribute("name");
            int age = (int) request.getAttribute("age");
            //从请求域中取出值
            out.print("名字:" + name + "<br/>");
            out.print("年龄:" +  age );
            out.print("<hr/>");
            //删除其中一个
            request.removeAttribute("age");
    
            //从请求域中取出值,直接输出Object对象
            out.print("名字:" + request.getAttribute("name") + "<br/>");
            out.print("年龄:" +  request.getAttribute("age") );
    
            System.out.println("这是one");
            //开始转发,参数是:要跳转到的地址
            request.getRequestDispatcher("/two").forward(request, response);
        }
    
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            this.doPost(request, response);
        }
    }
    
    
    TwoServlet
    package com.itheima.servlet;
    
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;
    import java.io.PrintWriter;
    
    //从请求域中取出值
    @WebServlet(name = "Demo7TwoServlet", urlPatterns = "/two")
    public class Demo7TwoServlet extends HttpServlet {
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            response.setContentType("text/html;charset=utf-8");
            PrintWriter out = response.getWriter();
            out.print("这是Two,从请求域中取出one中的值:" + request.getAttribute("name"));
        }
    
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            this.doPost(request, response);
        }
    }
    
    

    转发的特点

    1. 地址栏不发生变化,显示的是上一个页面的地址
    2. 请求次数:只有1次请求
    3. 根目录:http://localhost:8080/项目地址/,包含了项目的访问地址
    4. 请求域中数据不会丢失

    转发使用哪个方法?

    request.getRequestDispatcher("/地址").forward(request, response);
    

    页面的跳转:重定向

    1. 重定向原理
    2. 重定向的方法

    什么是重定向

    概念

    由浏览器端进行的页面跳转

    原理图

    在这里插入图片描述
    重定向方法
    在这里插入图片描述

    重定向案例

    需求

    从OneServlet重定向到TwoServlet

    步骤

    1. 在OneServlet中向请求域中添加键和值
    2. 使用重定向到TwoServlet,在TwoServlet中看能否取出请求域的值

    效果

    在这里插入图片描述

    代码

    OneServlet
    package com.itheima.servlet;
    
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;
    import java.io.PrintWriter;
    
    /**
     与请求域相关的方法
     */
    @WebServlet(name = "Demo6OneServlet", urlPatterns = "/one")
    public class Demo6OneServlet extends HttpServlet {
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            response.setContentType("text/html;charset=utf-8");
            PrintWriter out = response.getWriter();
            out.print("这是One<br/>");
            //向请求域中添加键和值
            request.setAttribute("name","Jack");
            request.setAttribute("age", 20);  //整数类型
            String name = (String) request.getAttribute("name");
            int age = (int) request.getAttribute("age");
            //从请求域中取出值
            out.print("名字:" + name + "<br/>");
            out.print("年龄:" +  age );
            out.print("<hr/>");
            //删除其中一个
            request.removeAttribute("age");
    
            //从请求域中取出值,直接输出Object对象
            out.print("名字:" + request.getAttribute("name") + "<br/>");
            out.print("年龄:" +  request.getAttribute("age") );
    
            System.out.println("这是one");
            //开始转发,参数是:要跳转到的地址
            //request.getRequestDispatcher("/two").forward(request, response);
    
            //使用重定向
            response.sendRedirect("two");
        }
    
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            this.doPost(request, response);
        }
    }
    
    
    TwoServlet
    package com.itheima.servlet;
    
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;
    import java.io.PrintWriter;
    
    //从请求域中取出值
    @WebServlet(name = "Demo7TwoServlet", urlPatterns = "/two")
    public class Demo7TwoServlet extends HttpServlet {
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            response.setContentType("text/html;charset=utf-8");
            PrintWriter out = response.getWriter();
            out.print("这是Two,从请求域中取出one中的值:" + request.getAttribute("name"));
        }
    
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            this.doPost(request, response);
        }
    }
    
    

    重定向的特点

    1. 地址栏:显示新的地址
    2. 请求次数:2次
    3. 根目录:http://localhost:8080/ 没有项目的名字
    4. 请求域中的数据会丢失,因为是2次请求

    疑问

    1. 问:什么时候使用转发,什么时候使用重定向?

      如果要保留请求域中的数据,使用转发,否则使用重定向。

      以后访问数据库,增删改使用重定向,查询使用转发。

    2. 问:转发或重定向后续的代码是否还会运行?

      无论转发或重定向后续的代码都会执行

    小结:重定向和转发的区别

    区别 转发forward() 重定向sendRedirect()
    根目录 包含项目访问地址 没有项目访问地址
    地址栏 不会发生变化 会发生变化
    哪里跳转 服务器端进行的跳转 浏览器端进行的跳转
    请求域中数据 不会丢失 会丢失
    展开全文
  • SpringBoot中处理的转发与重定向

    万次阅读 多人点赞 2018-11-06 23:15:45
    转发:一次请求,服务器内部调用另外的组件处理,request和response可以共用,有限制性,只能转发到本应用中的某些资源,页面或者controller请求 课可以访问WEB-INF目录下面的页面 重定向:两次请求,地址会改变...
  • IP转发

    万次阅读 2020-09-14 22:55:36
    主机和路由器都能转发ip,不同之处在于:主机不转发那些不是由它生成的数据报,但路由器会转发。 IP地址可以接收一个数据报。 当IP模块接收到一个数据报时, 首先检查此数据报的目的地址是否为自己的IP地址, ...
  • iptables 端口转发

    万次阅读 2018-08-22 17:32:24
    ssh 也能实现本机的端口转发,只不过原来的 1 条连接会变成 3 条。详情见前一篇 ssh 端口转发博文。而 iptables 的端口转发则是在内核进行。 1、将本地的端口转发到本机端口 将本机的 7777 端口转发到 6666 端口。...
  • ip转发和mpls转发对比

    千次阅读 2019-08-07 16:39:32
    1、IP转发原理和mpls的转发原理 比较和他们之间的差别 IP转发:逐跳转发 要经过查表 速度缓慢 并且 IP包头20个字节 mpls转发:则通过事先分配好的标签进行转发、每到一台设备只查找一次,并且包头只有4字节,效率...
  • 代理IP的直接转发与隧道转发

    千次阅读 2019-07-18 17:04:30
    直接转发与隧道转发是什么? AC FIT AP架构的网络中存在两种报文,一类是AC管理控制AP的报文,称为管理报文(也叫控制报文),另一类是STA的用户数据报文,称为业务报文。 如上图所示,图中的虚线表示报文的转发...
  • 阿里云22端口做本地端口转发到2000

    万次阅读 2020-03-18 11:11:05
    设置端口号转发规则:(使用22端口登陆) iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 2000 -j REDIRECT --to-port 22 保存规则: [root ~]# cd /etc/rc.d/init.d [root ~]# ....
  • 微信小程序禁止转发和长按转发

    千次阅读 2020-09-05 18:29:30
    禁止当前页面转发 /** * 生命周期函数--监听页面加载 */ onLoad: function (options) { wx.hideShareMenu() // 禁止页面转发 } 禁止当前页面长按转发     分享到个人时可以长按转发,分享到群聊里不能长按...
  • python基于socket进行端口转发实现后门隐藏 思想: 用户正常浏览器访问请求通过8080端口,请求若为http请求,则正常转发到80端口保证网站正常运行。否则转发到8888端口执行系统命令。 8888端口监听代码: #!/usr/bin...
  • 针对firewalld的端口转发做了如下两个练习. 1 服务器内端口转发. 在服务器A上,将发送到A服务器的5423端口的数据转发到A服务器的80端口. 服务器A上执行一条指令: firewall-cmd --permanent --add-forward-...
  • Nginx 实现端口转发

    万次阅读 2019-06-02 15:53:06
    什么是端口转发 当我们在服务器上搭建一个图书以及一个电影的应用,其中图书应用启动了 8001 端口,电影应用启动了 8002 端口。此时如果我们可以通过 localhost:8001 //图书 localhost:8002 //电影 访问,但我们...
  • 通过本文的介绍,读者可以从中了解到如何应用 SSH 端口转发机制来解决日常工作 / 生活中的一些问题。学会在非安全环境下使用端口转发来加密网络应用,保护个人隐私以及重要商业信息。同时也能够用此技术解决工作中...
  • 微信小程序 转发 分享功能

    万次阅读 多人点赞 2018-10-13 11:18:24
    官网文档:... 第一种情况 点击小程序转发 ... //转发 onShareAppMessage: function() { let users = wx.getStorageSync('us...
  • 直通转发和存储转发

    万次阅读 2015-04-30 11:32:51
    在二层交换机上有三种转发方式: 1.直通转发(cut-through switching ) 2.存储转发(Store-and-Forward switching) 3.无碎片转发(segment-free switching) 由于第三种方法主要是第一种“直通转发”的变形,所以...
  • 在做微服务和单独集成等同构异构的项目过程中,可能会遇到做代理转发、请求转发等相关的功能,下面的代码(项目片段demo代码)可能具有一定的参与功能 下面代码仅供参考,具体还需要根据自己的项目情况对代码进行改造...
  • 最近开发小程序遇到了一个需求,在页面内定义一个转发按钮,只能在页面内点击这个转发按钮才能触发转发,右上角转发隐藏掉。 实现效果: 页面内部转发按钮: 实现方法: 微信小程序官方文档中提到,使用wx....
  • IP转发行动

    万次阅读 2020-09-14 22:59:45
    当一台主机或路由器需要向下一跳转发数据报时,它首先检查数据报中的IP地址。在算法表中使用该IP地址来执行最长前缀匹配算法。 最长前缀匹配算法: 当路由器接收到一个IP数据包时,将数据包的目的ip地址与本地...
  • 一、完全转发DNS:通过我解析的全部抛给辅服务器去解析,我就是休息! 搭建步骤: 主服务器: 编辑配置文件: vi /etc/named.conf options { forwarders { #声明转发的ip地址; ...
  • 转发与重定向

    万次阅读 多人点赞 2018-07-27 15:03:47
    转发是服务器行为,重定向是客户端行为。转发耗时比重定向少。 转发——&gt;客户浏览器发送HTTP请求——&gt;web服务器接受请求——&gt;调用内部一个方法在容器内部完成请求处理和转发动作——&gt;...
  • GPSR:贪婪转发与周边转发

    千次阅读 2019-03-05 16:14:42
    博客主题推荐:Theme Art Design,“笔记记录+搭建知识体系”的利器。 这是之前学习《无线传感网络》这门课做的期末大作业,GPSR是"...这是一种无状态的路由转发协议,巧妙地借助“贪婪转发”和“周边转发”有效...
  • portfwd端口转发,listen端口转发

    千次阅读 2018-05-22 20:31:37
    连接上meterpreter后,利用portfwd进行端口转发portfwd add -l 7891 -p 3389 -r 192.168.43.41-l 7891 转发到本地的1234端口-p 3389 转发目标机的3389-r 192.68.43.41 目标机ip输入portfwd,查看是否转发成功...
  • SSH端口转发与二次转发

    千次阅读 2018-07-31 14:28:00
    SSH端口转发功能通过ssh隧道方式,在本地端口和远程服务器的某个服务之间建立转发关系,而SSH连接充当了转发服务流量的隧道。从安全性来说,正确配置的SSH服务器有很高的安全性,而SSH Tunneling可以转发任意的服务...
  • 如何识别小程序转发转发到群还是转发到好友? onShow: function () { wx.showShareMenu({ //这里是为了分享群可以获取群信息,比如shareTickets withShareTicket: true }) }, onShareAppMessage: ...
  • 请求转发

    千次阅读 2019-07-07 14:06:01
    //使用请求转发 req.getRequestDispatcher("page").forward(req, resp); 实例代码 package com.wf.servlet; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet....
  • SSH的端口转发:本地转发Local Forward和远程转发Remote Forward关于使用ssh portforwarding来进行翻墙的操作,网络上已经有很多很好的文章,我在这里只是画两个图解释一下。首先要记住一件事情就是:SSH 端口转发自然...
  • SSH本地转发与远程转发

    千次阅读 2017-02-13 15:58:06
    当你发现实验室的防火墙阻止...端口转发概述让我们先来了解一下端口转发的概念吧。我们知道,SSH 会自动加密和解密所有 SSH 客户端与服务端之间的网络数据。但是,SSH 还同时提供了一个非常有用的功能,这就是端口转发

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 119,460
精华内容 47,784
关键字:

转发