Unter Windows für MIKRO-Sekunden warten?
-
Und warum muss da jetzt gewartet werden??
-
Jochen Kalmbach schrieb:
Ein Port-Scanner arbeitet normal mit Raw-Sockets und sendet einfach ein SYNC...
das syn schickt er ja auch mit dem 'connect'. dauert zwar etwas, bis das abbricht, aber mit mehrern threads kann man ja schon ein paar connects parallel losschicken. und was die raw sockets unter win angeht: die taugen nicht viel. schicken manchmal icmp messages hinterher und machen kaum das, was man von ihnen erwarten würde.
-
Nur so ein Port-Scanner wird ab XP-SP2 nicht mehr Funktionieren...
http://www.microsoft.com/technet/prodtechnol/winxppro/maintain/sp2netwk.mspx
-
Jochen Kalmbach schrieb:
Nur so ein Port-Scanner wird ab XP-SP2 nicht mehr Funktionieren...
http://www.microsoft.com/technet/prodtechnol/winxppro/maintain/sp2netwk.mspxzu glück gibt's seit jeher sogenannte 'packet driver'. da können sich m$ ihre "raw" sockets sonstwo hinstecken!
-
MasterCounter schrieb:
Und warum muss da jetzt gewartet werden??
also das 1. sleep is dafür, dass funktionport in der funktion scan richtig zugewiesen wird, da ich net wusste wie man das direkt der funktion übergiebt bzw. es nicht funktionierte, habe es so gemacht:
... void scan (void *dummy, int funktionport) // das ist die funktion scan mit der variable die empfangen werden soll anfangsport -> funktionport ... _beginthread (scan, 0, NULL, &anfangsport); // hier wird ein zeiger auf anfangsport übergeben ...
es ging dann net weil kein port übergeben wurde sondern immer die zahl 18, ka warum
und das 2. sleep is dafür dass die for-schleife net dauerhaft durchläuft, das würde 50% cpu-auslastung kosten
eigentlich funkt alles normal, mein prob is nur, auch wenn ich nur 1ms pro sleep warte, wergehen pro thread 2ms und dann sind 500 threads gleich schnell wie 1000 irgendwie
lg papanoah
-
Papa_Noah schrieb:
... void scan (void *dummy, int funktionport) // das ist die funktion scan mit der variable die empfangen werden soll anfangsport -> funktionport ... _beginthread (scan, 0, NULL, &anfangsport); // hier wird ein zeiger auf anfangsport übergeben ...
es ging dann net weil kein port übergeben wurde sondern immer die zahl 18, ka warum
das sollte doch eher so aussehen
void scan (void *anfangsport) { ... } ... _beginthread (scan, 0, (void*)anfangsport) ...
so ein void* wird in solchen apis benutzt, weil man da alles mögliche reintun kann. in deinem fall ist übergabe 'by value' besser, also keine adresse. sonst wenn alle threads eine variable benutzen gibt das nur ein durcheinander
-
juhu damit gehts, thx net und natürlich auch allen anderen
lg papanoah
-
Also nächstes mal sofort sagen worum es wirklich geht...
-
net schrieb:
Papa_Noah schrieb:
... void scan (void *dummy, int funktionport) // das ist die funktion scan mit der variable die empfangen werden soll anfangsport -> funktionport ... _beginthread (scan, 0, NULL, &anfangsport); // hier wird ein zeiger auf anfangsport übergeben ...
es ging dann net weil kein port übergeben wurde sondern immer die zahl 18, ka warum
das sollte doch eher so aussehen
void scan (void *anfangsport) { ... } ... _beginthread (scan, 0, (void*)anfangsport) ...
so ein void* wird in solchen apis benutzt, weil man da alles mögliche reintun kann. in deinem fall ist übergabe 'by value' besser, also keine adresse. sonst wenn alle threads eine variable benutzen gibt das nur ein durcheinander
hallo,
nun habe ich das problem wenn ich 2 werte übergeben will dann geht das nicht mehr, wobei der 1. wert normal übergeben wird, nur der 2. geht net, da wird IMMER 18 übergeben aber das stimmt net:... void scan (int* sip2, int *funktionport) { ...} main ... _beginthread (scan, 0, (int*)sip, (int*)anfangsport);
habe es so ungefähr gemacht, also gleich wie oben nur mit noch nem 2. wert, was is da falsch?
lg papanoah
-
typedef struct MyThreadParam { int sip2; int funktionport; // noch weitere Parameter... } MyThreadParam; MyThreadParam *param = new MyThreadParam; param->sip2 = 1; param->funktionport = 2; _beginthread(MyThread, 0, (void*) param); MyThread(void *pData) { MyThreadParam *p = (MyThreadParam) pData; int sip2 = p->sip2; int funktionport = p->funktionport; // ... }
-
Jochen Kalmbach schrieb:
typedef struct MyThreadParam { int sip2; int funktionport; // noch weitere Parameter... } MyThreadParam; MyThreadParam *param = new MyThreadParam; param->sip2 = 1; param->funktionport = 2; _beginthread(MyThread, 0, (void*) param); MyThread(void *pData) { MyThreadParam *p = (MyThreadParam) pData; int sip2 = p->sip2; int funktionport = p->funktionport; // ... }
danke, werd ich ausprobieren
lg papanoah