Ir para conteúdo

Criando seu próprio Portscan


Gabrielbrandao16

Posts Recomendados

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

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...)


1974674602_Capturadetelade2018-05-1818-15-31.png.990782b2a16f797b61cc0110ddacf5c6.png

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

@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

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

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

  • Quem Está Navegando   0 membros estão online

    • Nenhum usuário registrado visualizando esta página.
×
×
  • Criar Novo...