Greenleon
Tripel-As
Hallo,
ich moechte meine C-Kenntnisse etwas vertiefen. Dazu moechte ich einen Portscanner schreiben, der versucht eine TCP-Verbindung zu einem Bestimmten Port einer Liste von Hosts aufzubauen und meldet ob der Port auf dem Rechner offen ist.
In meiner Recherche bin ich ueber 3 Ansaetze gestolpert:
1. Verbindung aufbauen; timeout || sucess; naechste Verbindung, etc.
Das dauert natuerlich sehr lange, da 0 Parallelisierung
2. Threads: Wie 1., nur dass das ganze in mehreren Threads parallelisiert wird.
Machen wohl die meisten so. Ist aber mit ziemlich viel Ressourcen verbunden und soll auch nicht so effektiv sein.
3. Die NMAP-Methode: Das ganze wird mit nichtblockenden Ports gemacht, die mit Select ueberwacht werden. Diese Methode moechte ich auch implementieren.
Leider bin ich nicht auf wirklich brauchbaren Quelltext gestossen, an dem ich mich orientieren koennte, deswegen hab ich ein paar grundsaetzliche Fragen.
Was ich bereits verstanden hab (glaube ich):
- Ich gehe in einer Schleife die Liste der Zielrechner durch, erstelle jeweils einen socket(), connect()e diesen Socket im nonblocking Modus zum Zielrechner und fuege ihn dann in das fd_set fuer select() ein.
Ist das soweit richtig?
Was muss ich jetzt mit select anstellen?
Gruss
Leon
ich moechte meine C-Kenntnisse etwas vertiefen. Dazu moechte ich einen Portscanner schreiben, der versucht eine TCP-Verbindung zu einem Bestimmten Port einer Liste von Hosts aufzubauen und meldet ob der Port auf dem Rechner offen ist.
In meiner Recherche bin ich ueber 3 Ansaetze gestolpert:
1. Verbindung aufbauen; timeout || sucess; naechste Verbindung, etc.
Das dauert natuerlich sehr lange, da 0 Parallelisierung
2. Threads: Wie 1., nur dass das ganze in mehreren Threads parallelisiert wird.
Machen wohl die meisten so. Ist aber mit ziemlich viel Ressourcen verbunden und soll auch nicht so effektiv sein.
3. Die NMAP-Methode: Das ganze wird mit nichtblockenden Ports gemacht, die mit Select ueberwacht werden. Diese Methode moechte ich auch implementieren.
Leider bin ich nicht auf wirklich brauchbaren Quelltext gestossen, an dem ich mich orientieren koennte, deswegen hab ich ein paar grundsaetzliche Fragen.
Was ich bereits verstanden hab (glaube ich):
- Ich gehe in einer Schleife die Liste der Zielrechner durch, erstelle jeweils einen socket(), connect()e diesen Socket im nonblocking Modus zum Zielrechner und fuege ihn dann in das fd_set fuer select() ein.
Ist das soweit richtig?
Was muss ich jetzt mit select anstellen?
Gruss
Leon