透明代理学习

对透明代理,需要使用几个功能,首先IP_TRANSPARENT,内核2.6.28就已经支持, centos6.3及以上是肯定支持的。

它的作用是,如果某个ip在本机不存在,监听0.0.0.0一样可以收到数据,而发送的时候,可以bind任意一个不存在的ip(当然这个bind你使用netstat是看不见的),这样你就可以伪造任意客户端的报文。

代码也很简单

监听增加

setsockopt(fd, SOL_IP, IP_TRANSPARENT, &value, sizeof(value))

发送增加

setsockopt(fd, SOL_IP, IP_TRANSPARENT, &value, sizeof(value))
if(getsockname( s->client_sock , (struct sockaddr *)&server_addr, &addrlen ) )
{
  http_close_stream(s,"adns_transparent_client");
  return;
}

这里获取真正的服务器地址,写入server_addr

if (bind(s->server_sock, (struct sockaddr*)&s->client_addr, addrlen ) == -1)
{
    http_close_stream(s, "adns_transparent_bind");
return;
}

绑定客户端地址(虽然本机没有这个ip)

r = connect_nonb(sock, (struct sockaddr *)&server_addr);

连接真正的服务器地址。

当然如果想收到报文,还是需要做一些操作的,比如我们收到路由器转发的80端口的请求。

然后

iptables -t mangle -N DIVERT
iptables -t mangle -A PREROUTING -p tcp -m socket -j DIVERT
iptables -t mangle -A DIVERT -j MARK --set-mark 1
iptables -t mangle -A DIVERT -j ACCEPT
       
ip rule add fwmark 1 lookup 100
ip route add local 0.0.0.0/0 dev lo table 100
iptables -t mangle -A PREROUTING -p tcp --dport 80 -j TPROXY --tproxy-mark 0x1/0x1 --on-port 81

注意你的服务器的监听端口改成非80,比如81端口,这样就能收到数据了。

可是我发现能收到数据,握手成功,但是服务器像真正的源站发送的握手又被交换机给转发回来了。

因为对于交换机来说,客户端发的握手和服务器发的握手在ip层面都一模一样,源地址和目的地址都相同。

这里需要对交换机做一个限制,对于服务器mac地址的包,走默认路由。

如下是路由器配置

10.0.30.100是客户端

10.0.3.15是服务器

ip access-list extended ppc
 permit tcp host 10.0.30.100 any eq www
ip access-list extended ppc-15
 permit tcp any eq www host 10.0.30.100
route-map ppc-15 permit 10
 match ip address ppc-15
 set ip next-hop 10.0.3.15
!
route-map ppc permit 10
 match ip address ppc
 set ip next-hop 10.0.3.15
!
route-map ppc permit 20
interface Vlan300
 ip address 10.0.30.1 255.255.255.0
 ip policy route-map ppc
interface GigabitEthernet0/24
 no switchport
 ip address 10.0.0.2 255.255.255.252
 no ip proxy-arp
 ip policy route-map ppc-15
时间: 2024-08-05 11:15:58

透明代理学习的相关文章

Squid学习之旅之透明代理回顾

系统环境:CentOS 6.5 Squid 3.0 内网网段:10.211.55.0/24 Squid服务器地址:10.211.55.4 (端口是3128) 客户端地址: 10.211.55.9 网 关:10.211.55.1 使用源码包编译安装 安装源码包必备参数集 ./configure --prefix=/usr/local/squid --sysconfdir=/usr/local/squid/etc --bindir=/usr/local/squid/bin --sbindir=/us

postrouting和prerouting的区别以及透明代理

一.源 在学习鸟哥的linux私房菜NAT部分的时候为了加深对postrouting和prerouting的理解,上网查了相关的一些资料.有一篇博文写的很好,给了我很多的启示:/jis1237/article/details/17676659(csdn),下面谈谈自己的所得. 二.关键词链接 访问外网---发一个数据报---路由规则审核一哈---snat( 源地址转换)---postrouting(路由规则之后的动作)---从内网出 外网访问内网---发送一个数据报---dnat (目的地址转换

图解正向代理、反向代理、透明代理

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://z00w00.blog.51cto.com/515114/1031287 套用古龙武侠小说套路来说,代理服务技术是一门很古老的技术,是在互联网早期出现就使用的技术.一般实现代理技术的方式就是在服务器上安装代理服务软件,让其成为一个代理服务器,从而实现代理技术.常用的代理技术分为正向代理.反向代理和透明代理.本文就是针对这三种代理来讲解一些基本原理和具体的适用范围,便于大家更深入理

基于zbus网络通讯模块实现的MySQL透明代理(<100行代码)

项目地址 https://git.oschina.net/rushmore/zbus 我们上次讲到zbus网络通讯的核心API: Dispatcher -- 负责-NIO网络事件Selector引擎的管理,对Selector引擎负载均衡 IoAdaptor -- 网络事件的处理,服务器与客户端共用,负责读写,消息分包组包等 Session -- 代表网络链接,可以读写消息 实际的应用,我们几乎只需要做IoAdaptor的个性化实现就能完成高效的网络通讯服务,今天我们将举例说明如何个性化这个IoA

图解正向代理、反向代理、透明代理(转)

转自:http://www.cnblogs.com/Anker/p/6056540.html 正向代理:代理服务器代替客户端想服务器发送请求 反向代理:客户直接访问反向代理服务器,反向代理服务器通过反向代理获取服务器内容,然后返回给客户端 透明代理:修改包,中转,透明 套用古龙武侠小说套路来说,代理服务技术是一门很古老的技术,是在互联网早期出现就使用的技术.一般实现代理技术的方式就是在服务器上安装代理服务软件,让其成为一个代理服务器,从而实现代理技术.常用的代理技术分为正向代理.反向代理和透明代

java动态代理学习笔记

没事的时候翻看lang.reflect包下的代码,发现有两部分内容:涉及反射和动态代理. 很多地方都可以看到动态代理的影子,只是一直没仔细看下. 在学习之前,先提出几个问题,带着问题来看代码: 1.什么是动态代理? 2.为什么使用动态代理? 3.使用它有哪些好处? 4.哪些地方需要动态代理? --------------------分隔线----------------------------- 和动态代理有关的有两个类 1.interface InvocationHandler Object

CgLib动态代理学习【Spring AOP基础之一】

如果不了解JDK中proxy动态代理机制的可以先查看上篇文章的内容:Java动态代理学习[Spring AOP基础之一] 由于Java动态代理Proxy.newProxyInstance()的时候会发现其参数类型是ClassLoader classLoader, Class<?>[] interface, InvocationHandler handler, 只支持根据接口实现代理类,如果所有代码都是自己掌控,当然没有问题.所有的业务逻辑均抽象出接口,然后所有的业务类实现接口,这样所有的业务类

Squid透明代理+ACL访问控制+日志分析

防伪码:仰天大笑出门去,我辈岂是蓬蒿人 第一章 Squid透明代理+ACL访问控制+日志分析 前言:搭建代理服务器可以提高上网打开网页的速度,可以对非法网站进行屏蔽,限制文件下载,以及查看员工访问internet的情况,包括上网的地址,用户,时间等,是企业网络管理的常用手段. 代理服务器分为传统代理和透明代理,传统代理适用于浏览internet,需要在浏览器上手工指定服务器地址和端口,不是很方便,但是可以隐藏本机真实的ip地址,而且为下载工具使用多个代理可以规避服务器的并发连接显示.透明代理适用

正向代理,反向代理和透明代理的区别

一.正向代理(Forward Proxy) 一般情况下,如果没有特别说明,代理技术默认说的是正向代理技术.关于正向代理的概念如下: 正向代理(forward)是一个位于客户端[用户A]和原始服务器(origin server)[服务器B]之间的服务器[代理服务器Z],为了从原始服务器取得内容,用户A向代理服务器Z发送一个请求并指定目标(服务器B),然后代理服务器Z向服务器B转交请求并将获得的内容返回给客户端.客户端必须要进行一些特别的设置才能使用正向代理.如下图1.1 (图1.1) 从上面的概念