Afin de détecter les port scans, y compris les furtifs7, nous avons besoin d'un accès brut aux entêtes des paquets IP et TCP.
Pour un IDS basé sur un réseau, nous désirons utilisé un mode mélangé afin d'obtenir les paquets bruts. C'est le problème décrit dans l'article de NAI : fausses positive8 et fausses négative9 sont possibles. Pourtant, quelquefois ceci est acceptable pour ce type d'attaque puisqu'il est impossible de détecter tout les port scans.
Pour un système IDS basé sur une machine hôte, il y a deux possibilités majeurs d'obtenir les paquets : en lisant les paquets TCP bruts ou les sockets IP, ou en se procurant directement les données dans le noyau (via un module chargeable ou un patch).
Lorsque l'on utilise une socket TCP brute, la plupart des problèmes montrés par NAI ne s'appliquent plus : nous prenons uniquement les paquets reconnus par notre noyau. Toutefois, il ne s'agit que d'une analyse passive (il se peut que nous perdions des paquets) et que d'un système fail-open10. Bien qu'il soit acceptable uniquement pour les port scans, mais ce n'est pas une solution si nous voulons détecter d'autres attaques par la suite. Si nous utilisons une socket IP brute à la place (car certains systèmes n'ont pas de sockets TCP brutes), nous n'aurons alors plus les problèmes énnoncés par NAI. Dans l'exemple de code, une socket TCP brute est utilisée.
Le système IDS le plus abouti serait un système capable de supporter les noyaux des diffèrents systèmes sur lesquels il sera utilisé. Il aura accès à toutes les informations indispensables, et pourra même être fail-close11. Le seul désavantage vient du fait que les modules et les patchs ne sont que très peu portables.