ArpRequest - requisição arp para endereço físico
Publicado por Jeffersson Abreu (última atualização em 09/08/2016)
[ Hits: 3.641 ]
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]))
B.S.A.N.S. - Break Security - Automated Network Scanner [PARTE 1]
Nenhum coment�rio foi encontrado.
Servidor de Backup com Ubuntu Server 24.04 LTS, RAID e Duplicati (Dell PowerEdge T420)
Visualizar câmeras IP ONVIF no Linux sem necessidade de instalar aplicativos
Atualizar Debian Online de uma Versão para outra
Instalar driver Nvidia no Debian 13
Redimensionando, espelhando, convertendo e rotacionando imagens com script
Debian 13 Trixie para Iniciantes
Convertendo pacotes DEB que usam ZSTD (Padrão Novo) para XZ (Padrão Antigo)
Problema com impressoras de rede (0)
Ajuda com o Debian 13 - Video hibrido geforce 940 mx Wayland OFF (1)