Ir para conteúdo
Fórum Script Brasil
  • 0

Verificar portas simultaneamente


RodrigoGomes

Pergunta

Boa noite amigos(as),

Estou desenvolvendo um script que verifica uma série de portas de um IP, ele apenas faz a requisição para saber se ela esta "aberta" ou "fechada", por exemplo verificar portas de 20 a 6000 no IP 123.456.789.

Beleza, ele funciona perfeitamente, excerto por um motivo: A demora.

Usando fsockopen() cada porta precisa de no mínimo 2 segundos de espera para verificar se ela esta fechada (se estiver aberta é rápido), então imagina 6 mil portas, estando apenas 3/4 abertas?

É uma demora muito grande.

Eu pesquisei em toda parte e não achei nada sobre o que quero fazer, que é testar as portas simultaneamente. Exemplo, enquanto a porta 20 esta sendo verificada a porta 21 começava a ser verificava também, depois 22, e assim por diante.

Alguém sabe se existe uma forma de fazer isso? Eu estou precisando muito.

Link para o comentário
Compartilhar em outros sites

6 respostass a esta questão

Posts Recomendados

  • 0

Hi.

Seria ótimo se o PHP tivesse threads, mas por enquanto, você vai ter que se virar com o que tem pra hoje. =p

Como o MLeandroJr! falou, você pode diminuir o timeout do fsockopen já que quando a porta está aberta, é mais rápido.

Também pode dividir a task com forking. Creio que haverá um bom ganho de desempenho.

Mas o ideal mesmo para este tipo de aplicação é utilizar outra linguagem de programação (C ou até Perl) e convocar o script de dentro do PHP.

[]'s

Link para o comentário
Compartilhar em outros sites

  • 0

Bom, aparentemente isso deve funcionar.. mas infelizmente PCNTL não é suportado em windows e meu apache esta em um windows.

andei pensando, e bolei uma forma de fazer isso. é mais complexa porém menos demorada que a original:

eu criaria um arquivo "verificar_porta.php" que verifica apenas uma porta, após verificar ele colocaria a porta no banco de dados se ela tivesse aberta, dentro desse meu arquivo eu colocaria "ignore_user_abort(true);" que ignora se a conexão for abortada.

Depois faria outro arquivo (verificar.php), ele chamaria o "verificar_porta.php" desta forma:

$host="localhost";
if ($fp = @fsockopen($host, 80, $errno, $errstr, 2)) {
$out = "POST /verificar_porta.php HTTP/1.1\r\n";
$out .= "Host: $host\r\n";
$out .= "Connection: Close\r\n\r\n";
$out .= "ip=123.456.789&porta=20";
fwrite($fp, $out);
fclose($fp);
}

Esse código ficara dentro de um for, até completar as 6 mil portas.

Ele conecta e aborta a conexão sem esperar, deixando o script "verificar_porta.php" rodando em background. Por fim, bastava o script pegar o resultado do banco de dados e exibir.

Editado por Vampyro
Link para o comentário
Compartilhar em outros sites

  • 0

Me desculpem por ressuscitar este tópico, mais eu preciso muito desta solução...

Como foi feito?

Eu preciso fazer várias conxões ao mesmo tempo igual o Vampyro, sem esperar que uma termine para depois fazer a outra.

Se uma conexão então dura mais ou menos 2 segundos, eu preciso fazer por exemplo "6mil" conexões de uma só vez, durando 2 segundos ao total ao invés de 12 mil segundos.

Agradeço desde já!

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...