ArpRequest - requisição arp para endereço físico
Publicado por Jeffersson Abreu (última atualização em 09/08/2016)
[ Hits: 3.601 ]
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]))
Ligando máquina pela rede usando Python
auth_ig.py: Script para autenticação do IG
Nenhum coment�rio foi encontrado.
Aprenda a Gerenciar Permissões de Arquivos no Linux
Como transformar um áudio em vídeo com efeito de forma de onda (wave form)
Como aprovar Pull Requests em seu repositório Github via linha de comando
Quebra de linha na data e hora no Linux Mint
Organizando seus PDF com o Zotero
tentando instalar em um notebook antigo o Linux LegacyOS_2023... [RESO... (9)
Problema com Conexão Outlook via Firewall (OpenSUSE) com Internet Fibr... (5)