Eu sou um usuário pesado de plink / ssh e é o proxy SOCKS5 e os recursos de encaminhamento de porta. Aqui estão minhas idéias:
Será difícil confiar apenas no status do processo plink.exe para determinar a conectividade do seu proxy SOCKS5 ou de qualquer encaminhamento de porta SSH. Às vezes, sua conexão SSH pode estar morta por qualquer motivo aleatório, mas o plink.exe não conseguirá detectá-la e continuará "executando".
Para garantir que o encaminhamento de porta do SOCKS5 ainda esteja funcionando, vou até monitorar a porta do proxy SOCKS5 local . Essa é a porta na qual você se conecta ao seu navegador para usar o proxy (plink CLI -D 8008
). Depois que o plink.exe terminar o handshake SSH, ele fará o encaminhamento de porta e escutará a porta local escolhida (8008 do meu exemplo anterior). Se a conexão SSH não for bem-sucedida, travada, rejeitada, fechada ou negada, a porta do SOCKS5 NÃO será aberta nem escutada. Neste caso, a porta 8008 NÃO estará disponível.
Eu tenho um pequeno script PHP que tentará se conectar a essa porta local (8008):
function check_open_port($host, $port, $timeout)
{
$connection = @fsockopen($host, $port, $errno, $errstr, $timeout);
if (is_resource($connection))
{
fclose($connection);
return true;
}
else return false;
}
Isso deve criar quase nenhum tráfego. E é fácil codificar em qualquer outro idioma.
Você também pode executar um curl e ver se pode obter um retorno de um site popular por meio do proxy SOCKS5 (cria um pouco mais de tráfego):
curl --socks5 127.0.0.1:8008 http://checkip.amazonaws.com/
Então você pode configurar uma segunda tarefa agendada para executar este script de monitor a cada X minutos e por erro, matar o processo plink.exe e reiniciar (use pskill ).
Você também pode fazer um único script para iniciar o plink.exe, monitorá-lo e reiniciá-lo, se necessário. Para iniciar o plink.exe em segundo plano (em PHP), use psexec exec("psexec -d plink.exe")
. Agora, execute imediatamente um loop de monitoramento e certifique-se de que a porta local encaminhada pela porta permaneça aberta.
Tudo isso pode parecer complicado, mas é uma solução muito confiável. Ele irá funcionar com qualquer tipo de ssh port-forwards (não apenas o SOCKS5). Eu tenho passado por muitos set-ups para fazer todo esse trabalho confiável nos últimos 5 anos ... Eu não acho que você pode fazer isso com Tarefas Agendadas e plugar sozinho.
Eu também estou usando klink.exe (KiTTY) em vez de plink.exe, que é um fork do PuTTY. Ele oferece mais algumas opções para automatizar o processo.