printf("Socket %s:%d could not be closed properly.\n",hostname, loop);
71
}
72
73
74
//Beende winsock
75
WSACleanup();
76
77
78
printf("Portscan has finished\n");
79
system("pause");
80
return EXIT_SUCCESS;
81
}
Erstens funktioniert er nicht mit dem localhost (127.0.0.1) und zweitens
ist das kreieren der Sockets ziemlich langwierig. ( 1 Portscan dauert
ungefähr eine halbe Sekunde - bei 65k ports - phu ...)
Hat jemand eine Idee wie ich dem Programm ein bisschen Feuer unterm
A.... machen und/oder mich selbst scannen kann?
Ich sollte vllt dazu erwähnen, dass ich wenn ich andere Hosts scanne mit
wireshark die Pakete auf dem Interface flitzen sehe. Wenn ich aber
localhost scanne nicht( ist vllt auch normal bin mir aber nicht sicher
).
Wäre für jede Hilfe dankbar.
Grüße
Manuel
Nicht das Erstellen vom Socket dauert so lange, sondern das Verbinden.
Ich weiß nicht genau ob man alle Signale unter Windows benutzen kann,
aber wenn, dann wäre das aller einfachste ein sig alarm nach 5 Sekunden
oder so zu senden, wodurch das Verbinden abgebrochen wird. Das zweit
einfachste wäre es, den Socket nicht blockieren zu lassen, dann
Verbinden und per select() darauf warten, ob man in den Socket schreiben
darf.
Tobias O. schrieb:
> Nicht das Erstellen vom Socket dauert so lange, sondern das Verbinden.> Ich weiß nicht genau ob man alle Signale unter Windows benutzen kann,> aber wenn, dann wäre das aller einfachste ein sig alarm nach 5 Sekunden
Ich will den Port nur öffnen und wieder schließen. Ob offen oder nicht
prüfe cih dann am Rückgabewert. 5 Sekunden sind viel zu lange!
> oder so zu senden, wodurch das Verbinden abgebrochen wird. Das zweit
Das erledige ich mit closesocket() allerdings kann ich da nicht während
dem Verbinden reinpfuschen weil socket() solange blockiert, bis die
Verbindung steht.
> einfachste wäre es, den Socket nicht blockieren zu lassen, dann> Verbinden und per select() darauf warten, ob man in den Socket schreiben> darf.
Socket nict blockieren lassen??? Wie meinen?
Manuel Schneider schrieb:
> Tobias O. schrieb:>> Nicht das Erstellen vom Socket dauert so lange, sondern das Verbinden.>> Ich weiß nicht genau ob man alle Signale unter Windows benutzen kann,>> aber wenn, dann wäre das aller einfachste ein sig alarm nach 5 Sekunden>> Ich will den Port nur öffnen und wieder schließen. Ob offen oder nicht> prüfe cih dann am Rückgabewert. 5 Sekunden sind viel zu lange!
Wenn auf dem Port keine Antwort erfolgt, weil die Firewall des Rechners
die blockiert, dauert es ziemlich lange, bis ein Timeouut kommt.
>> oder so zu senden, wodurch das Verbinden abgebrochen wird. Das zweit>> Das erledige ich mit closesocket() allerdings kann ich da nicht während> dem Verbinden reinpfuschen weil socket() solange blockiert, bis die> Verbindung steht.
Nicht socket(), sondern connect() blockiert.
>> einfachste wäre es, den Socket nicht blockieren zu lassen, dann>> Verbinden und per select() darauf warten, ob man in den Socket schreiben>> darf.>> Socket nict blockieren lassen??? Wie meinen?
Du kannst vor dem connect() den Socket auf non-blocking stellen. Dann
kehrt die Funktion sofort zurück.
Dann kannst du per select mit timeout warten. Damit kannst du auch auf
mehrere Sockets gleichzeitig warten. Alternativ kann man sich auch ein
SIGIO schicken lassen, wenn die Verbindung aufgebaut ist und dann darauf
reagieren.
Oder du kannst die Timeouts des Sockets verstellen, damit er schneller
zurückkehrt. Zumindest unter Linux geht das, aber Windows kann das
bestimmt auch.
> Du kannst vor dem connect() den Socket auf non-blocking stellen. Dann> kehrt die Funktion sofort zurück.
Wie funktioniert das?
> Dann kannst du per select mit timeout warten. Damit kannst du auch auf> mehrere Sockets gleichzeitig warten. Alternativ kann man sich auch ein> SIGIO schicken lassen, wenn die Verbindung aufgebaut ist und dann darauf> reagieren.> Oder du kannst die Timeouts des Sockets verstellen, damit er schneller> zurückkehrt. Zumindest unter Linux geht das, aber Windows kann das> bestimmt auch
...und das?
Laut www.sockets.com gibbets da nix mit timeout...
1
SOCKET PASCAL FAR socket ( int af, int type, int protocol);
2
3
af
4
An address format specification. The only format currently supported is PF_INET, which is the ARPA Internet address format.
5
type
6
A type specification for the new socket.
7
protocol
8
A particular protocol to be used with the socket, or 0 if the caller does not wish to specify a protocol.
1
int PASCAL FAR connect ( SOCKET s, const struct sockaddr FAR * name, int namelen);
2
s
3
A descriptor identifying an unconnected socket.
4
name
5
The name of the peer to which the socket is to be connected.
> ..nennt mich einen Spielverderber, aber wäre es nicht einfacher, einen> fertigen Scanner wie nmap [1, 2] zu verwenden?
der Tip war eigentlich gut, weil nmap auch im Quelltext vorliegt.
Ja allerdings ca. 30 MB Source-code wenn ich mich Recht erinnern kann.
Wer so nett ist und suchen will darf mir gerne die Richti8ge stelle
raussuchen.
Aber sonst ist nmap natürlich klasse. Ich nutze es natürlich auch um
meinen Portscannner zu testen.
Trotzdem Danke
Vielleicht hilft Dir ja der Hinweis auf "netcat" weiter. Das liegt im
Quellcode vor; der Code ist zwar nicht jedermanns Sache, aber vom Umfang
schön klein...
Suche auch mal nach O_NONBLOCKING.