Det kan ikke gøres 100% i Java da Java kun tillader netværkskode ovenpå TCP eller UDP, mens ARP protokollen ligger lidt længere nede. Du er nødt til at have adgang til raw sockets, og det kan du ikke i ren Java.
Så må du ud i noget JNI (Java Native Interface), men der er nogen, som har lavet libraries til det...det her bl.a.:
http://www.savarese.com/software/rocksaw/Jeg har dog ikke selv prøvet det.