Gabrielbrandao16 Postado Maio 18, 2018 em 15:06 Compartilhar Postado Maio 18, 2018 em 15:06 Olá , sei que muitos já podem até saber como que faz , mas sempre há gente iniciando e que fica dependendo de ferramentos , então hoje irei ensina como que se cria seu próprio portscan , para não precisar depender sempre de portscans prontos como por exemplo o nmap. CODIGO? import socket ip = input("digite o ip ou site desejado: ") for porta in range(1,65535): s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.settimeout(0.2) if s.connect_ex((ip, porta)) ==0: print(porta, "aberta") agora irei explicar o codigo para que não seja apenas um simples copiar e colar a primeira linha começa com Citar import socket ou seja o python ira importar uma biblioteca chamada socket , e você me pergunta "o que diabos é socket" simples Sockets são usados para enviar dados através da rede, um exemplo seria enviar um arquivo pelo MSN, ou até mesmo as mensagens. a terceira linha começa com Citar ip = input("digite o ip ou site desejado: ") primeiramente comecei declarando uma variável chamada ip logo em seguida dei um input , o input é uma função para que o usuário possa escrever seja int, float, bool, complex ou String. a quinta linha começa com Citar for porta in range(1,65535): essa linha é bem simples o comand for é para , a porta é uma variável , in é no e o range é uma função de loop , ou seja para a porta no range ele ira fazer um loop de 1 até 65535. sexta linha Citar s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) o s é uma variável declarada , e logo em seguida vem o socket que iremos utilizar nesse codigo que é um socket de stream ou seja ele apenas ira se comunicar com o alvo. sétima linha Citar s.settimeout(0.2) nessa linha iremos usar novamente a nossa variável s junto com o comando settimeout(0.2) este comando ira fazer que ele vai se conectar com a porta por apenas 2 segundos. oitava linha Citar if s.connect_ex((ip, porta)) ==0: nessa linha temos uma condição que é : se a variavel s se conectar pela maneira connect_ex((ip,porta) obs: Citar que ira conectar o ip e a porta e a resposta for 0 . nona linha Citar print(porta, "aberta") está é a ultima linha ou seja se tudo ocorro bem ele ira printar na tela as portas que estiverem abertas -------------------------------------------------------------------------------------------------------------------------------------------- espero que tenham gostando até a proxima Link para o comentário Compartilhar em outros sites More sharing options...
Felipe.Silva Postado Maio 18, 2018 em 21:27 Compartilhar Postado Maio 18, 2018 em 21:27 Uma dica que eu dou em relação ao código é que você não precisava criar um socket novo a cada iteração do for. (6° linha) Você podia criar o socket antes do for e usar sem problemas. Assim você está criando muitos sockets a toa. Fiz o teste aqui e a diferença é absurda. Enquanto o seu código "normal" demora 7 segundos para executar. A versão que eu simplesmente movi a linha 6 para antes do for executa em menos de 1 segundo. (se demora 7 segundos para testar no localhost... Imagine em um host em uma rede externa...) Só isso que vou falar sobre o código. Em relação a seu método de ensino eu tenho uma crítica. Você não precisa explicar linha por linha do código, apenas um conceito geral. Se a pessoa sabe programar em Python, então ela vai se enjoar e não vai querer ler o que já sabe. E se ela não souber, ela não vai aprender lendo este post. De qualquer forma ou você fala mais do que precisa, ou fala algo que não vai adiantar de nada. É a mesma coisa que fazer comentários óbvios como: x += y; // Soma X mais Y Se a pessoa sabe programar é desnecessário, se não sabe não vai aprender porque leu esse comentário. e.e Sem falar que você explicou o óbvio mas esqueceu do principal: Como funciona e para que serve um portscan. Enfim, é só isso a minha crítica. Link para o comentário Compartilhar em outros sites More sharing options...
Visitante gnoo Postado Maio 18, 2018 em 22:41 Compartilhar Postado Maio 18, 2018 em 22:41 @Gabrielbrandao16 Citar for porta in range(1,65535): essa linha é bem simples o comand for é para , a porta é uma variável , in é no e o range é uma função de loop , O range() não é uma função de loop, a função range define o inicio, e o fim de um sequência podendo ou não adiconar um passo. se tu definires uma variável com um determinado número podes verificar a existencia desse numero sem nenhum ciclo de repetição, exemplo: a = 5 if a in range(1, 10): print("ok existe") else : print("nao existe") Citar s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) o s é uma variável declarada , e logo em seguida vem o socket que iremos utilizar nesse codigo que é um socket de stream ou seja ele apenas ira se comunicar com o alvo. SOCK_STREAM indica que é um socket TCP e não que "apenas se irá comunicar com o alvo" é um pouco mais complexo que isso... Citar if s.connect_ex((ip, porta)) ==0: se a variavel s se conectar pela maneira connect_ex((ip,porta) obs: Citar que ira conectar o ip e a porta e a resposta for 0 . A variável s não se conecta a nada, a variável s da forma que esta definida inicia um objeto ... e não se irá conectar se a resposta for 0, o que 0 indica é que a comunicação foi feita, e é a partir dessa comparação que são executadas as instruções que seguem caso seja efetuada com sucesso. Já agora queria agradecer por partilhares esse codigo especialmente esta linha: Citar if s.connect_ex((ip, porta)) ==0: eu por norma é definir uma variável para receber o valor do s.connect_ex((ip, porta), e depois faço a comparação, mas desta forma que mostras também é bem pensado. Outra questão a rever é o numero de portos a testar com o exemplo de código que mostra 65535, não é muito eficaz, o melhor seria implementar um sistema de Threads, ou então alterar o código para determinar uma sequência de portos especifica. Mas estás num bom caminho só tens que estudar um pouco melhor alguns conceitos, abraço. Link para o comentário Compartilhar em outros sites More sharing options...
Gabrielbrandao16 Postado Maio 19, 2018 em 13:12 Autor Compartilhar Postado Maio 19, 2018 em 13:12 14 horas atrás, gnoo disse: @Gabrielbrandao16 O range() não é uma função de loop, a função range define o inicio, e o fim de um sequência podendo ou não adiconar um passo. se tu definires uma variável com um determinado número podes verificar a existencia desse numero sem nenhum ciclo de repetição, exemplo: a = 5 if a in range(1, 10): print("ok existe") else : print("nao existe") SOCK_STREAM indica que é um socket TCP e não que "apenas se irá comunicar com o alvo" é um pouco mais complexo que isso... A variável s não se conecta a nada, a variável s da forma que esta definida inicia um objeto ... e não se irá conectar se a resposta for 0, o que 0 indica é que a comunicação foi feita, e é a partir dessa comparação que são executadas as instruções que seguem caso seja efetuada com sucesso. Já agora queria agradecer por partilhares esse codigo especialmente esta linha: eu por norma é definir uma variável para receber o valor do s.connect_ex((ip, porta), e depois faço a comparação, mas desta forma que mostras também é bem pensado. Outra questão a rever é o numero de portos a testar com o exemplo de código que mostra 65535, não é muito eficaz, o melhor seria implementar um sistema de Threads, ou então alterar o código para determinar uma sequência de portos especifica. Mas estás num bom caminho só tens que estudar um pouco melhor alguns conceitos, abraço. Muito Obrigado pelas dicas , tmj Link para o comentário Compartilhar em outros sites More sharing options...
Posts Recomendados
Arquivado
Este tópico foi arquivado e está fechado para novas respostas.