1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

Associar serviço a porta detetada (python)

Discussão em 'Programação' iniciada por Psycho_Mind, 27 de Março de 2013. (Respostas: 16; Visualizações: 1044)

  1. Psycho_Mind

    Psycho_Mind Power Member

    Boas.

    Tenho um pequeno programa em python que está a verificar numa determinada gama de endereços quais as portas que estão abertas para os mesmos, indicando o endereço/porta/estado, mas eu queria acrescentar a esta informação o serviço associado para cada porta.

    Pensei em tentar ter um ficheiro com uma lista de todas as portas com o respetivo serviço e depois carregar essa lista e mostrar o serviço de acordo com a porta detetada, mas parece-me um pouco rebuscado e também não estou a ver como o implementar. Qual poderá ser a melhor solução ?

    Obrigado.
     
  2. Sl0w

    Sl0w Power Member

    É uma boa ideia. O único senão é que por vezes certos serviços não estão à escuta na porta por defeito, frustrando assim esse método. Outra ideia mais sofisticada seria, por exemplo, iniciar e analisar uma breve troca de mensagens com o serviço à escuta nessa porta, e com base nisso identificar o protocolo/serviço.
     
  3. pr0p

    pr0p Power Member

    Podes sempre usar um conjunto com o nmap ou nc, para te auxiliar.
     
  4. Psycho_Mind

    Psycho_Mind Power Member

    Mas a escuta da porta é corretamente efetuada, eu consigo obter a informação sobre se a mesma está aberta ou não, preciso agora é que me apareça durante a pesquisa a infromação que para a porta x tem o serviço y.

    A utilização de ferramentas como o nmao por si só são suficientes, mas eu tendo um programa 'de raiz' não sei como obter informação como no caso do nmap, porque o mesmo já dá todo o tipo e mais algum de informação, e só tenho mesmo em falta a associação do serviço à porta que detetou.
     
  5. pr0p

    pr0p Power Member

    Última edição: 27 de Março de 2013
  6. Psycho_Mind

    Psycho_Mind Power Member

    Era a minha intenção original... O meu problema e não uma noção de como o poder fazer para poder comparar com as portas para as quais estou a fazer a verificação.
     
  7. pr0p

    pr0p Power Member

    Mas se já tens a porta é só procurares a porta e retornares o serviço.

    Por exemplo. no ficheiro procuras o $2 (num da porta) e retornas o $1 (nome do serviço)

    cat nmap-services.txt | awk '{print $1}' -> nome do serviço
    cat nmap-services.txt | awk '{print $2}' -> Portas
     
    Última edição: 27 de Março de 2013
  8. Psycho_Mind

    Psycho_Mind Power Member

    Mas tenho de alguma forma conseguir ir ler o ficheiro linha a linha... Mas depois como faço para ele ler a porta no ficheiro, comparar com a detetada e mostrar na shell o serviço correspondente ?
    A minha dificuldade está em conseguir perceber como consegui agregar esta situação no meu código.
     
  9. pr0p

    pr0p Power Member

    Última edição: 27 de Março de 2013
  10. Psycho_Mind

    Psycho_Mind Power Member

  11. Psycho_Mind

    Psycho_Mind Power Member

    Está dificil de conseguir obter o resultado de acordo com as portas utilizadas na pesquisa. Este é a parte do codigo que me esta a retornar as portas abertas/ou fechadas de acordo com o ip que é dado para a procura. Mas não estou a conseguir incorporar corretamente a ideia de ir buscar à lista as portas e dar os serviços, primeiro de tudo porque não estou a conseguir efetuar uma forma de 'comparação' a partir das portas apresentadas e ir buscar à lista os serviços...

    def scan(ip,start_port,end_port,timeout):

    for port in range(start_port,end_port + 1):
    s=socket(AF_INET, SOCK_STREAM)
    s.settimeout(timeout)
    if(s.connect_ex((ip,port))==0):
    print ip, "%s OPEN"%port
    s.close()
    else:
    print ip, "%s CLOSED"%port
    s.close()
     
  12. pr0p

    pr0p Power Member

    Por acaso python não domino muito.

    Mas tu no código podes sempre para cada porta aberta que tenhas fazeres algum do gerenero.

    Em shell funcionaria assim
    Vais fazer um grep no ficheiro pelo Port number, que te vai dar as linhas em que esse port é referido, dpx pode ser necessario diferenciar por TCP UDP.
    Depois de obteres as linhas vais retornar com o awk apenas o primeiro elemeento com o delimitador "espaço"

    grep -w $PORT nmap-services.txt | awk '{print $1}'
     
  13. Psycho_Mind

    Psycho_Mind Power Member

    Percebi a tua ideia, que me parece bastante bem, mas nem o grep consigo colocar a funcionar!
    Isto está-se a tornar frustrante, de certeza que não estou a implementar as coisas corretamente.
     
    Última edição: 28 de Março de 2013
  14. pr0p

    pr0p Power Member

    podes tentar por procurar grep in python ou assim
     
  15. Psycho_Mind

    Psycho_Mind Power Member

    Claro que o google foi logo a 1ª opçõa para tentar perceber como utilizar o grep, por isso estava a dizer que não devo de estar a implementar corretamente algo, pois não consegui solucionar a coisa! Vou continuar a procurar...
     
  16. Psycho_Mind

    Psycho_Mind Power Member

    Situação resolvida. Obrigado.
     
  17. pr0p

    pr0p Power Member

    Qual foi a solução que encontraste?
     

Partilhar esta Página