PortBunny tente de corriger les faiblesses de nmap. Il ne fait qu'une chose et le fait bien : détecter si des ports TCP et UDP sont ouverts ou fermés (pas de fingerprinting par exemple). Il fonctionne en espace noyau pour des raisons de performances.

Le gros défaut de nmap est la gestion des ports filtrés (lorsque le serveur ne répond ni SYN ni RST, il ne répond pas). PortBunny propose une démarche originale : lorsqu'il reçoit une réponse, il s'en sert comme trigger pour détecter les ports filtrés. Effectivement, on peut envoyer un petit jeu de tests de ports terminés par le trigger (10 tests suivi d'un trigger). Une fois qu'on a reçu la réponse du trigger, on sait que les ports n'ayant pas reçu de réponse sont filtrés. Un trigger peut aussi être un ping ICMP.

La présentation contient des commentaires du code source de nmap qui sont plutôt drôle dans le contexte de la présentation :-)

De jolis graphiques comparent les performances de nmap et Port Bunny. Sur une machine branchée sur Internet et protégée par un parefeu avec très peu de ports ouverts, nmap prend 12 minutes 18 sec alors que Port Bunny ne prend que 15 secondes ! Pour des scans plus rapide (environ 30 secondes), nmap est parfois plus rapide. Mais dans les pires cas, Port Bunny tire toujours son épingle du jeu : 7 min 58 sec contre 24 min 41 sec pour nmap sur un iPhone.