当前位置: 首页 > 软件库 > 程序开发 > 网络工具包 >

spp

网络代理工具
授权协议 未知
开发语言 Google Go SHELL
所属分类 程序开发、 网络工具包
软件类型 开源软件
地区 国产
投 递 者 乐刚毅
操作系统 跨平台
开源组织
适用人群 未知
 软件概览

spp是一个简单强大的网络代理工具。

功能

  • 支持的协议:tcp、udp、可靠udp(rudp)、可靠icmp(ricmp)、kcp
  • 支持的类型:正向代理、反向代理、socks5正向代理、socks5反向代理
  • 协议和类型可以自由组合
  • 外部代理协议和内部转发协议可以自由组合

使用

服务器

  • 启动server,假设服务器ip是www.server.com,监听端口8888
# ./spp -type server -proto tcp -listen :8888
  • 也可以同时监听其他类型的端口与协议
# ./spp -type server -proto tcp -listen :8888 -proto rudp -listen :9999 -proto ricmp -listen 0.0.0.0
  • 也可以使用docker
# docker run --name my-server -d --restart=always --network host esrrhs/spp ./spp -proto tcp -listen :8888

 

客户端

  • 启动tcp正向代理,将www.server.com的8080端口映射到本地8080,这样访问本地的8080就相当于访问到了www.server.com的8080
# ./spp -name "test" -type proxy_client -server www.server.com:8888 -fromaddr :8080 -toaddr :8080 -proxyproto tcp
  • 启动tcp反向代理,将本地8080映射到www.server.com的8080端口,这样访问www.server.com的8080就相当于访问到了本地的8080
# ./spp -name "test" -type reverse_proxy_client -server www.server.com:8888 -fromaddr :8080 -toaddr :8080 -proxyproto tcp
  • 启动tcp正向socks5代理,在本地8080端口开启socks5协议,通过server访问server所在的网络
# ./spp -name "test" -type socks5_client -server www.server.com:8888 -fromaddr :8080 -proxyproto tcp
  • 启动tcp反向socks5代理,在www.server.com的8080端口开启socks5协议,通过client访问client所在的网络
# ./spp -name "test" -type reverse_proxy_client -server www.server.com:8888 -fromaddr :8080 -toaddr :8080 -proxyproto tcp
  • 其他代理协议,只需要修改client的proxyproto参数即可,例如
代理udp
# ./spp -name "test" -type proxy_client -server www.server.com:8888 -fromaddr :8080 -toaddr :8080 -proxyproto udp

代理可靠udp
# ./spp -name "test" -type proxy_client -server www.server.com:8888 -fromaddr :8081 -toaddr :8081 -proxyproto rudp

代理可靠icmp
# ./spp -name "test" -type proxy_client -server www.server.com:8888 -fromaddr :8082 -toaddr :8082 -proxyproto ricmp

同时代理上述三种
# ./spp -name "test" -type proxy_client -server www.server.com:8888 -fromaddr :8080 -toaddr :8080 -proxyproto udp -fromaddr :8081 -toaddr :8081 -proxyproto rudp -fromaddr :8082 -toaddr :8082 -proxyproto ricmp

  • client和server之间的内部通信,也可以修改为其他协议,外部协议与内部协议之间自动转换。例如
代理tcp,内部用可靠udp协议转发
# ./spp -name "test" -type proxy_client -server www.server.com:8888 -fromaddr :8080 -toaddr :8080 -proxyproto tcp -proto rudp

代理tcp,内部用可靠icmp协议转发
# ./spp -name "test" -type proxy_client -server www.server.com -fromaddr :8080 -toaddr :8080 -proxyproto tcp -proto ricmp

代理udp,内部用tcp协议转发
# ./spp -name "test" -type proxy_client -server www.server.com:8888 -fromaddr :8080 -toaddr :8080 -proxyproto udp -proto tcp
  • 也可以使用docker
# docker run --name my-client -d --restart=always --network host esrrhs/spp ./spp -name "test" -type proxy_client -server www.server.com:8888 -fromaddr :8080 -toaddr :8080 -proxyproto tcp

 

性能测试

  • 使用benchmark/local_tcp目录的iperf脚本,在单机测试,在cpu跑满的情况下,测试最大带宽速度。代理协议是tcp,采用各种中转协议转发的结果如下:
代理方式 速度
直连 3535 MBytes/sec
tcp转发 663 MBytes/sec
tcp转发(加密) 225 MBytes/sec
tcp转发(加密压缩) 23.4 MBytes/sec
rudp转发 5.15 MBytes/sec
rudp转发(加密) 5.81 MBytes/sec
rudp转发 5.05 MBytes/sec
ricmp转发 3.34 MBytes/sec
ricmp转发(加密) 3.25 MBytes/sec
ricmp转发 3.46 MBytes/sec
kcp转发 18.2 MBytes/sec
kcp转发(加密) 18.6 MBytes/sec
kcp转发(加密压缩) 14.7 MBytes/sec
  • 使用benchmark/remote_tcp目录的iperf脚本,在多机测试,服务器位于腾讯云,客户端位于本地,测试最大带宽速度。代理协议是tcp,采用各种中转协议转发的结果如下:
代理方式 速度
直连 2.74 MBytes/sec
tcp转发 3.81 MBytes/sec
tcp转发(加密) 3.90 MBytes/sec
tcp转发(加密压缩) 4.02 MBytes/sec
rudp转发 3.33 MBytes/sec
rudp转发(加密) 3.41 MBytes/sec
rudp转发 3.58 MBytes/sec
ricmp转发 3.21 MBytes/sec
ricmp转发(加密) 2.95 MBytes/sec
ricmp转发 3.17 MBytes/sec
kcp转发 3.58 MBytes/sec
kcp转发(加密) 3.58 MBytes/sec
kcp转发(加密压缩) 3.75 MBytes/sec
  • 注:测试数据是centos.iso,已经被压缩过了,所以压缩转发的效果不明显
  • 如果想直接测试下网络的各协议带宽,使用多协议带宽测试工具connperf
 相关资料
  • tags: polipo linux 下的 shadowsocks 不提供全局代理的功能,因此不得不寻找其他办法。 因此我们引入 polipo,在 shadowsocks 提供的 socks5 代理的基础上提供 http 代理。 PAC全局代理 参考资料: Ubuntu 16安装shadowsocks-qt5并使用PAC全局代理 具体做法如下: 安装 pip sudo apt-get insta

  • 我们提供了一些网络工具来为你操作并使用网路信息提供便捷,比如说获取ip,发送邮件等。 WebUtils 方法原型: getFileFromUrl( $url ) 静态方法, 从网络地址中获取文件路径,也就是把网络地址转换成文件路径。 参数名称 参数类型 参数说明 $url string 要处理的url @return string 返回文件路径 方法原型: getClientIP() 静态方法,获

  • 7.1. 查询网络服务和端口 netstat 命令用于显示各种网络相关信息,如网络连接,路由表,接口状态 (Interface Statistics),masquerade 连接,多播成员 (Multicast Memberships) 等等。 列出所有端口 (包括监听和未监听的): netstat -a 列出所有 tcp 端口: netstat -at 列出所有有监听的服务状态: netstat

  • 由来 在日常开发中,网络连接这块儿必不可少。日常用到的一些功能,隐藏掉部分IP地址、绝对相对路径的转换等等。 介绍 NetUtil 工具中主要的方法包括: longToIpv4 根据long值获取ip v4地址 ipv4ToLong 根据ip地址计算出long型的数据 isUsableLocalPort 检测本地端口可用性 isValidPort 是否为有效的端口 isInnerIP 判定是否为内

  • 网络爬虫使用的技术--数据抓取: 在爬虫实现上,除了scrapy框架之外,python有许多与此相关的库可供使用。其中,在数据抓取方面包括: urllib2(urllib3)、requests、mechanize、selenium、splinter; 其中,urllib2(urllib3)、requests、mechanize用来获取URL对应的原始响应内容;而selenium、splinter通

  • 我目前正在基于这个示例实现一个OpenID身份验证。现在我在后面开发一个网络代理,所以服务器不能连接到谷歌。Java代理设置似乎没有任何作用。我也发现了这个stackoverflow问题,但我想不出该把代码放在哪里。我如何为我的spring boot容器配置代理? 谢谢