Socket-Timeout in C++, Linux
Ok, zuallererst möchte ich erwähnen, was ich mache, ist völlig ethische und ja, ich bin port-scanning.
Das Programm läuft gut, wenn der port offen ist aber, wenn ich zu einem geschlossenen sockel hält das Programm für eine sehr lange Zeit, weil es keine time-out-Klausel. Unten ist der folgende code
int main(){
int err, net;
struct hostent *host;
struct sockaddr_in sa;
sa.sin_family = AF_INET;
sa.sin_port = htons(xxxx);
sa.sin_addr.s_addr = inet_addr("xxx.xxx.xxx.xxx");
net = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
err = connect(net, (struct sockaddr *)&sa, sizeof(sa));
if(err >= 0){ cout << "Port is Open"; }
else { cout << "Port is Closed"; }
}
Fand ich diese auf stack overflow aber es funktioniert einfach nicht sinnvoll, mich mit einem wählen Sie() Befehl.
Frage ist, können wir die connect () - Funktion timeout, damit wir nicht ein Jahr warten, bis es wieder mit einem Fehler?
- Keine Notwendigkeit zu erklären, warum Sie es brauchen - es ist wie zu Fragen, für Anweisungen an die bank und jedes mal, zu erklären, dass Sie möchten, um Geld abzuheben und nicht, um es rauben ...
- 😀 schön gesagt. aber nicht im Geld abheben 😀
Du musst angemeldet sein, um einen Kommentar abzugeben.
Der einfachste Weg ist die Einrichtung eines
alarm
und habenconnect
unterbrochen werden mit einem signal (siehe UNP 14.2):Obwohl
select
ist nicht viel schwerer 🙂Möchten Sie vielleicht lernen, über raw-sockets zu.
sigaction
sollte in der Regel bevorzugt, umsignal
, die unterschiedlichen Verhaltensweisen auf verschiedene UNIX-Varianten.Wenn du tot bist-setzen auf die Verwendung von blocking-IO, um dies getan, Sie sollten untersuchen, die setsockopt () - Aufruf, speziell die SO_SNDTIMEO-flag (oder einer anderen Flaggen, je nach OS).
Vorgewarnt werden diese flags nicht zuverlässig/portable und implementiert werden kann, anders als auf verschiedenen Plattformen oder verschiedenen Versionen einer Plattform.
Den traditionellen/beste Weg, dies zu tun ist über die nicht blockierenden Ansatz, der mithilfe von select(). In der Veranstaltung, die Sie sind, neue Steckdosen, eines der besten Bücher ist " TCP/IP Illustrated, Volume 1: The Protocols. Es ist bei Amazon unter: http://www.amazon.com/TCP-Illustrated-Protocols-Addison-Wesley-Professional/dp/0201633469
RudeSocket das Problem Gelöst
Fand ich eine lib-Datei, wird geprüft, linux Fedora (Nicht Sicher über Windows), das gibt mir die option timeout. Unten finden Sie ein sehr einfaches Beispiel.
Hier ist ein link zu der DevSite