ArpRequest - requisição arp para endereço físico
Publicado por Jeffersson Abreu (última atualização em 09/08/2016)
[ Hits: 3.704 ]
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]))
Aplicação gráfica para Wake-on-LAN com Python 3 + GUI Tk/Tcl
HCoin - Preço do Dólar, Bitcoin e Euro em Python
Nenhum comentário foi encontrado.
Como extrair chaves TOTP 2FA a partir de QRCODE (Google Authenticator)
Linux em 2025: Segurança prática para o usuário
Desktop Linux em alta: novos apps, distros e privacidade marcam o sábado
IA chega ao desktop e impulsiona produtividade no mundo Linux
Novos apps de produtividade, avanços em IA e distros em ebulição agitam o universo Linux
Como instalar o repositório do DBeaver no Ubuntu
Como instalar o Plex Media Server no Ubuntu
Digitando underscore com "shift" + "barra de espaços"
Como ativar a lixeira e recuperar aquivos deletados em um servidor Linux
Como mudar o nome de dispositivos Bluetooth via linha de comando
dpkg: erro: gatilho de arquivo duplicado chamado pelo arquivo de nome (6)
Instalação não está resolvendo as dependencias (2)
Captação de áudio no zorin linux começa a diminuir com o tempo (5)
Alternativas ao Multilogin para gerenciamento de múltiplas contas/prof... (0)









