ArpRequest - requisição arp para endereço físico
Publicado por Jeffersson Abreu (última atualização em 09/08/2016)
[ Hits: 3.776 ]
Homepage: https://somewhere.com
Este script faz uma simples requisição arp, e recebe uma resposta do endereço físico (mac address) da máquina em um range de rede.
Ainda está em melhorias mas já está funcional. O ponto forte é que não é necessário instalar nada
! Espero que vocês possam melhorá-lo ou adaptá-lo para o próprio propósito.
output:
192.168.0.1 is at 3c:1e:06:78:5f:d8
192.168.0.4 is at a7:9f:ba:14:54:0c
192.168.0.7 is at c8:3a:45:26:7e:6b
Exiting...
#!/usr/bin/env python3
########################
# #
# Escrito por: ctw6av #
# Versão 0.2 #
# #
########################
from binascii import hexlify, unhexlify
from netaddr import IPNetwork
from codecs import decode
from uuid import getnode
from ctypes import *
from struct import *
import socket
import sys
class ArpReplay(Structure):
_fields_ = [('eth_dst', c_char * 6),
('eth_src', c_char * 6),
('eth_pro', c_ushort),
('arp_hrd', c_ushort),
('arp_pro', c_ushort),
('arp_hln', c_byte),
('arp_pln', c_byte),
('arp_opr', c_ushort),
('arp_sha', c_char * 6),
('arp_sip', c_char * 4),
('arp_dha', c_char * 6),
('arp_dip', c_char * 4)]
def __new__(cls, socket_buffer):
return cls.from_buffer_copy(socket_buffer)
def __init__(self, socket_buffer=None, *args, **kwargs):
super().__init__(*args, **kwargs)
self.addr = decode(hexlify(self.arp_sha))
self.mac = ":".join([self.addr[i:i+2] for i in range(0, 12, 2)])
def get_ip():
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.connect(('8.8.8.8', 0))
return s.getsockname()[0]
def request(target):
eth_dst = unhexlify('ff' * 6)
eth_src = unhexlify(hex(getnode()).strip('0x'))
eth_pro = 0x0806
ether_frame = pack('!6s6sH', eth_dst, eth_src, eth_pro)
arp_hrd = 0x01
arp_pro = 0x0800
arp_hln = 0x06
arp_pln = 0x04
arp_opr = 0x01
arp_sha = unhexlify(hex(getnode()).strip('0x'))
arp_sip = socket.inet_aton(get_ip())
arp_dha = unhexlify('00' * 6)
arp_dip = socket.inet_aton(target)
arp_frame = pack('!HHBBH6s4s6s4s', arp_hrd, arp_pro, arp_hln, arp_pln, arp_opr,
arp_sha, arp_sip, arp_dha, arp_dip)
# Pacote arp com 42 bytes
packet = ether_frame + arp_frame
sock = socket.socket(socket.PF_PACKET, socket.SOCK_RAW, socket.htons(0x0806))
sock.bind((iface, 0))
sock.settimeout(0.5)
for x in range(2):
try:
try:
sock.send(packet)
buffer = sock.recvfrom(42)[0]
if socket.inet_ntoa(buffer[28:32]) == target:
arp_replay = ArpReplay(buffer)
print('{} is at {}'.format(target, arp_replay.mac))
break
except socket.timeout:
continue
except KeyboardInterrupt:
print('\rExiting...')
exit()
if __name__ == '__main__':
if len(sys.argv[:]) == 3:
iface = sys.argv[1]
subnet = sys.argv[2]
for ip in IPNetwork(str(subnet)).iter_hosts():
request(str(ip))
else:
print('usage: {} [interface] [subnet]'.format(sys.argv[0]))
auth_ig.py: Script para autenticação do IG
Nenhum comentário foi encontrado.
Cirurgia para acelerar o openSUSE em HD externo via USB
Void Server como Domain Control
Modo Simples de Baixar e Usar o bash-completion
Monitorando o Preço do Bitcoin ou sua Cripto Favorita em Tempo Real com um Widget Flutuante
Como impedir exclusão de arquivos por outros usuários no (Linux)
Cirurgia no Linux Mint em HD Externo via USB
Anúncio do meu script de Pós-Instalação do Ubuntu
Formas seguras de instalar Debian Sid (1)
Alguém executou um rm e quase mata a Pixar! (2)
Duas Pasta Pessoal Aparecendo no Ubuntu 24.04.3 LTS (5)
Alguém pode me indicar um designer freelancer? [RESOLVIDO] (4)
Por que passar nas disciplinas da faculdade é ruim e ser reprovado é b... (6)









