ArpRequest - requisição arp para endereço físico
Publicado por Jeffersson Abreu (última atualização em 09/08/2016)
[ Hits: 3.629 ]
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]))
auth_ig.py: Script para autenticação do IG
Aplicação gráfica para Wake-on-LAN com Python 3 + GUI Tk/Tcl
Nenhum coment�rio foi encontrado.
Atualizando o Passado: Linux no Lenovo G460 em 2025
aaPanel - Um Painel de Hospedagem Gratuito e Poderoso
O macete do Warsaw no Linux Mint e cia
Um modo leve de ouvir/ver áudio/vídeo da internet em máquinas pererecas
Resolver algumas mensagens de erro do SSH
Instalar módulo de segurança do Banco do Brasil Warsaw do tipo .run
Aprendendo mais sobre Linux com livro (6)
Procrastinação e autossabotagem são problemas muito comuns na sociedad... (6)