Scapy
Manipulador interativo de pacotes desenvolvido em Python.
Comandos Básicos
# Entra no modo interativo
scapy
# Lista todos os comandos
lsc()
# Exibino o help de determinado comando
help(<command>)
# Exibindo todos os protocolos que o Scapy suporta
ls()
# Exibindo detalhes de um protocolo
ls(<protocol>)
Criando Pacotes Personalizados
TCP/IP
# Utiliza o protocolo IP e define o IP de origem e destino
prot_ip = IP(dst="<ip_destino>")
prot_ip.src="<ip_origem>"
# Utiliza o protocolo TCP com a porta de destino 80 e a flag SYN (S)
prot_tcp = TCP(dport=80, flags="S")
Maneiras de verificar as configurações do protocolo
prot_ip
prot_ip.show()
prot_ip.summary()
Encapsulando os pacotes e enviando
pack = prot_IP/prot_TCP
resp = sr1(pack)
Exibindo o resultado completo
resp
resp.show()
resp.summary()
Filtrando somente por "flags" no pacote TCP
resp[TCP].flags
Enviando e Recebendo Vários Pacotes
# Utiliza o protocolo IP e define o IP de origem e destino
prot_ip = IP(dst="<ip_destino>",src="<ip_origem>")
prot_tcp = TCP(dport=[<port_1>,<port_2>,<port_3>])
pack = prot_IP/prot_TCP
resp, no_resp = sr(pack)
resp.show()
resp[0]
resp[1]
OBS.: Caso tenha somente o retorno de 1 pacote, utilize rs1
, caso tenha mais de um retorno, por exemplo, quando utilizamos mais de uma porta, utilize o rs
.
ICMP
Request-Reply
prot_ip = IP(dst="<ip_destino>",src="<ip_origem>")
pack = prot_ip/ICMP()
resp = sr(pack)
Request-Reply enviando um Payload. Isso também pode ser feito utilizando o TCP.
prot_ip = IP(dst="<ip_destino>",src="<ip_origem>")
pack = prot_ip/ICMP()/"Meu Payload"
resp = sr(pack)
Automatizando com Python
#!/usr/bin/python3
import sys
from scapy.all import *
# Desativa o modo verbose
conf.verb = 0
ports = [21,22,23,80]
host = IP(dst=sys.argv[1])
tcp = TCP(dport=ports,flags="S")
pack = host/tcp
resp, no_resp = sr(pack)
for x in resp:
current_port = x[1][TCP].sport
current_flag = x[1][TCP].flags
print(str(current_port) + ' -> ' + str(current_flag))
Last updated
Was this helpful?