ArpRequest - requisição arp para endereço físico
Publicado por Jeffersson Abreu (última atualização em 09/08/2016)
[ Hits: 3.507 ]
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]))
HCoin - Preço do Dólar, Bitcoin e Euro em Python
Shell reverso em Python - cliente
Importar múltiplos hosts ZABBIX
Nenhum comentário foi encontrado.
Passkeys: A Evolução da Autenticação Digital
Instalação de distro Linux em computadores, netbooks, etc, em rede com o Clonezilla
Título: Descobrindo o IP externo da VPN no Linux
Armazenando a senha de sua carteira Bitcoin de forma segura no Linux
Enviar mensagem ao usuário trabalhando com as opções do php.ini
Instalando Brave Browser no Linux Mint 22
vídeo pra quem quer saber como funciona Proteção de Memória:
Encontre seus arquivos facilmente com o Drill
Mouse Logitech MX Ergo Advanced Wireless Trackball no Linux
Compartilhamento de Rede com samba em modo Público/Anônimo de forma simples, rápido e fácil
PC não liga no filtro de linha (3)
Desde que seja DDR3, posso colocar qualquer memória? (3)
Instalar sem formatar, pergunta meio boba. [RESOLVIDO] (7)
Curso gratuito Defesa de redes 10ª Maratona CiberEducação Cisco Brasil... (0)