ArpRequest - requisição arp para endereço físico
Publicado por Jeffersson Abreu (última atualização em 09/08/2016)
[ Hits: 3.448 ]
Homepage: https://www.linkedin.com/in/jeffersson-abreu/
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]))
Importar múltiplos hosts ZABBIX
Nenhum comentário foi encontrado.
Compartilhando a tela do Computador no Celular via Deskreen
Como Configurar um Túnel SSH Reverso para Acessar Sua Máquina Local a Partir de uma Máquina Remota
Configuração para desligamento automatizado de Computadores em um Ambiente Comercial
Efeito "livro" em arquivos PDF
Como resolver o erro no CUPS: Unable to get list of printer drivers
Flatpak: remover runtimes não usados e pacotes
Mudar o gerenciador de login (GDM para SDDM e vice-versa) - parte 2
[Python] Automação de scan de vulnerabilidades
[Python] Script para analise de superficie de ataque
[Shell Script] Novo script para redimensionar, rotacionar, converter e espelhar arquivos de imagem
[Shell Script] Iniciador de DOOM (DSDA-DOOM, Doom Retro ou Woof!)
[Shell Script] Script para adicionar bordas às imagens de uma pasta