Jump to content

Criando seu próprio Portscan


Gabrielbrandao16

Recommended Posts

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 to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...