配合混淆ssh(obfuscated)的proxy智能线路选择

也不知道怎么了,一些网站访问总是不稳定, 速度也不能令人满意(呵呵,你懂的),总是上演道高一尺魔高一丈的激情攻防游戏。最近又学习了obfuscated ssh,作者08年开发出来但一直没受到重视,甚至连openssh都不接受作者的提交,然而谁也不知道路在何方,巧的是由于祖国的日益强大,obfuscated ssh近几年火了,还火的一塌糊涂。不多说,更多详情自己google、baidu吧,下边只讲一下安装使用过程。

项目地址:https://github.com/aligo/obfuscated-openssh

编译安装的话最好不要覆盖现有版本的ssh,使用时便于自主选择,下边的主要操作基于mac,linux下类似不多说,据说ubuntu已经默认支持了(没验证),windows就不提了装个potty就可以了。

一、以下是obfuscated ssh mac下的安装配置过程

下载源码:

https://github.com/brl/obfuscated-openssh/archive/master.zip

配置参数设置新目录:

?  brl-obfuscated-openssh-ca93a2c  ./configure  --prefix=/usr/local/newssh --sysconfdir=/etc/newssh

make:

?  brl-obfuscated-openssh-ca93a2c  make

在mac下make好像很多人都遇到了这个问题,解决方法很简单:

先make clean

找到Makefile的57行最后加入-lresolv,然后在进行make & make install

?  brl-obfuscated-openssh-ca93a2c  cat -n Makefile|grep LDFLAGS=
    57 LDFLAGS=-L. -Lopenbsd-compat/  -fstack-protector-all -lresolv

安装后效果如下:

使用:

/usr/local/newssh/bin/ssh -fCN  -Z obfuscate_keyword  [email protected]_server -p 110  -D 127.0.0.1:7070

这样就建立了完全的加密连接(初始化handshake的加密、ssh session的加密),设想如果有多个server的话,如何选择最快的server?

重点来了,那么可以结合ping、traceroute等检测手段选择最快的server进行连接(精华都在下边的脚本里,自己看),然后在结合crontab定期检测proxy的可用性,自动重连,呵呵,爽不,这里只贴出自己的脚本,详见https://github.com/LaiJingli/fastproxy

?  fastproxy  cat fastproxy_v2.sh
#!/bin/bash

###port forwarding support obfuscated ssh handshak using ssh as socks proxy server for fast access intranet web sites behind firewall from anywhere.
###by lai

###备选服务器列表
ssh_servers=(vip01.tttt.cn
vip02.tttt.cn
vip03.tttt.cn
vip04.tttt.cn
vip05.tttt.cn
vip06.tttt.cn
)
###备选端口列表
ssh_server_ports=(80 110 11231 10813)

###ssh相关参数定义
ssh_user_name=sshuser1
ssh_user_pass=123456
sshpass_cmd="/bin/sshpass -p$ssh_user_pass "
ssh_obf_cmd="/usr/local/newssh/bin/ssh -o StrictHostKeyChecking=no -p 110 -fCND 127.0.0.1:7070 -Z keyworks "

###定义运行此脚本所在os的ping返回结果格式
ping_os_type_macos="round-trip"
ping_os_type_linux="rtt"
ping_os_type=$ping_os_type_macos

#######以下内容不需要用户修改,自定义参数见上文变量定义部分
###parallel background detect which ssh server is the fastest according round-trip-time using ping and traceroute(for further support)
for i in `seq 0 $((${#ssh_servers[@]} - 1))` ;do
ip=${ssh_servers[$i]}
#echo $i $ip
###get the average round-trip-time
###ping 3次,每次间隔0.1s,超时1s
ping -c 2 -i 0.1 -t 1 $ip |grep $ping_os_type|awk -F/ ‘{print $5}‘ > /tmp/${ip}_rtt.log 2>&1 &
###记录每次ping进程的pid,以便后续根据pid是否存在判断进程是否早学完
pids[$i]=$!
#echo pid of $ip ${pids[$i]}
done

####循环检查pids数组中的pid是否运行结束的函数
pids_length=${#pids[@]}
array_check () {
   for i in `seq 0 $((${#pids[@]} - 1))` ;do
      #echo -------------------------------------array for loop----------------------
      if [  ${pids[$i]} == 0 ] ;then
         echo NULL >/dev/null
      else
      ####通过ps动态检查pid是否结束,返回0说明进程还没有结束
         ps aux|awk ‘{print $2}‘ | grep  ^${pids[$i]}$ 2>&1 >/dev/null
         pidstatus=$?
         ###if pids is not exists,that indecates the process is over,and display execute result,clean respective array elements
         if [ $pidstatus != 0 ] ;then
            ####进程结束后,打印执行结果log
   ip=${ssh_servers[$i]}
   rtt=`cat /tmp/${ip}_rtt.log`
   rtts[$i]=$rtt
   echo  "[$i] ping detect of ${ssh_servers[$i]} is over,and it‘s rtt is ${rtts[$i]} ms"
   #####同时pids数组中对应pid重置为0
            pids[$i]=0
   ####进程结束,返回200供后续判断
   return 200
   break
fi
      fi
###wait for 1 seconds to check whether the pids is over
#sleep 0.1
   done
}

####如果完成任务数complete_num不等于pids数组长度,则循环直到所有任务结束
complete_num=0
while [ ${complete_num} != ${pids_length} ] ;do
#echo =================================while loop=======================================
for ((j=0;j<${pids_length};j++)) ;do
array_check
####根据array_check函数返回值是否成功来确定complete_num数的增加
if [ $? == 200 ] ;then
complete_num=$((${complete_num}+1))
####打印最近任务完成的数量
echo -e "\033[35m\033[05m Ping Detect Report: complete_tasks/total_tasks:[${complete_num}/${pids_length}]\033[0m"
fi
done
done

###比较取到rtt最小的server地址
###初始化最小平均round-trip-time
min_rtt=10000
for i in `seq 0 $((${#ssh_servers[@]} - 1))` ;do
rtt=${rtts[$i]}
###如果当前rtt比最小的min_rtt还小,则min_rtt=$rtt
if  [[ $(echo "$rtt < $min_rtt" |bc) = 1 ]];then
min_rtt=$rtt
min_ip=${ssh_servers[$i]}
fi
done
echo ------------------------------
echo the fastest response time is $min_rtt ms of $min_ip ,to connect this server,plese wait a moment......

###kill the ssh session if it‘s pid is exist.
#ps aux|grep $ssh_user_name
ps aux|grep $ssh_user_name|grep -v grep|awk ‘{system("kill -9 "$2)}‘
#ps aux|grep $ssh_user_name|grep -v grep|awk ‘{print $2)}‘|xargs kill -9
#echo ------------------------------
###make connection to the fastest server
[email protected]$min_ip
pidstatus=$?
if [[ $pidstatus = 0 ]];then
echo Good luck,you have alredeay connect to the fastest server!
else
echo ERROR OCCUR,PLEASE CHECK.
fi
#echo ------------------------------
ps aux|grep $ssh_user_name

?  fastproxy

时间: 2024-08-29 22:06:10

配合混淆ssh(obfuscated)的proxy智能线路选择的相关文章

智能文件选择列表—— bat 批处理

智能文件选择列表 *.wim @echo off setlocal enabledelayedexpansion title 智能文件选择列表 pushd %~dp0 & cd /d %~dp0 :menu ::智能文件选择列表 *.wim if not defined wimfile call :filesel wim if %errorlevel%==0 ( set wimfile=%selfile% echo 已经选择:!wimfile! ) else ( echo 错误:未找到 *.%s

SSH框架 jar包版本的选择

我搭建SSH框架,想选择最新的jar,但是由于jar版本的问题 报出各种各样的千奇百怪的问题.从网上找了一些,但都是用比较老的版本.在我的不懈努力,最后终于成功了.再次分享一下,由于才疏学浅,见识浅薄,仅供大家参考! hibernate框架的选择,取决于spring的支持.在spring-orm-XX.jar 文件中有对hibernate的支持情况,像这个spring-orm-4.1.6.RELEASE.jar支持hibernate3,hibernate4,不支持hibernate5.所以我只能

线路选择巡线人员

procedure  TMainForm. ActionMakeHistroyTrackExecute(Sender:  Tobject); var sdtbegin,sdtend: string; begin I_M_ActionCurr:= TAction(Sender).Tag; sdtbegin:= formatdatetime('yyyy-mm-dd',DTPKerBegin.Date); adtend:=formatdatetime('yyyy-mm-dd', DTPKerEnd,

美国服务器线路选择

美国服务器 现在的国际出口带宽,国内的电信出口还是比较大的,所以很多做网站和做外贸的都是会会首先选择电信带宽.远程国外的主机丢包率小.操作国外的机器,因为距离的原因,所以信息走海底光缆不可避免的会丢失一些,导致在国内远程会出现卡顿的现象,还有就是延迟会大一些.但是我们国家的电信带宽和其他国家有网络合作,本地出口到国外全程电信,避免走其他国家的线路. 就拿美国Enzu机房:23.245.183.74 这个机房的机器来说,用TraceRoute这个功能就可以知道机器上ip走的线路以及总共有多少个节点

Nginx Proxy 的协议选择

1.nginx中的ip_local_port_range问题 # sysctl -a | grep ip_local net.ipv4.ip_local_port_range = 32768 61000 # sysctl -a | grep ip_local_port_range net.ipv4.ip_local_port_range = 10240 61000 2.nginx.conf upstream p2p_service { keepalive 50; server 127.0.0.1

Android设计模式之代理模式 Proxy

一.概述 代理模式也是平时比较常用的设计模式之一,代理模式其实就是提供了一个新的对象,实现了对真实对象的操作,或成为真实对象的替身.在日常生活中也是很常见的.例如A要租房,为了省麻烦A会去找中介,中介会替代A去筛选房子,A坐享中介筛选的结果,并且交房租也是交给中介,这就是一个典型的日常生活中代理模式的应用.平时打开网页,最先开到的一般都是文字,而图片等一些大的资源都会延迟加载,这里也是使用了代理模式. 代理模式的组成: Abstract Subject:抽象主题-声明真实主题和代理主题共同的接口

使用Telnet与ssh协议远程登录linux系统

一.计算机的登录 计算机终端设备通过输入用户账户标识和与之对应的口令的方式被计算机验证的过程. 终端的分类: 1)物理终端:计算机本身的控制台设备:通常将其标识为"pty",在现代计算机上,物理终端与早期的计算机上的物理终端的意义不一样了.在现在的linux系统上,物理终端设备被映射到/dev/console上,所有内核输出的信息都输出到console终端,除此之外,其他用户进程输出的信息一般都输出到虚拟终端或伪终端 2)虚拟终端:在现代的计算机中,通常将键盘+显示器组合称作"

Windows 下 Git SSH 连接方式配置 Socks 代理

原文章作者: upupming 原文章链接: https://upupming.site/2019/05/09/git-ssh-socks-proxy/ 最近从 GitHub clone 仓库速度极慢,遂查阅资料解决之.本文主要介绍 Git 使用 SSH 克隆时如何走 Socks 代理,因为使用 HTTPS 克隆的话目前基本上很容易找到资料,比如 Using a socks proxy with git for the http transport | Stackoverflow. 正如那个回答

一篇文章带你领略Android混淆的魅力

在 Android 日常开发过程中,混淆是我们开发 App 的一项必不可少的技能.只要是我们亲身经历过 App 打包上线的过程,或多或少都需要了解一些代码混淆的基本操作.那么,混淆到底是什么?它的好处有哪些?具体效果如何?别急,下面我们来一一探索它的"独特"魅力. 混淆简介 代码混淆(Obfuscated code)是将程序中的代码以某种规则转换为难以阅读和理解的代码的一种行为. 混淆的好处 混淆的好处就是它的目的:令 APK 难以被逆向工程,即很大程度上增加反编译的成本.此外,And