On Wednesday, 16 March 2016 at 22:22:15 UTC, Anonymouse wrote:
On Wednesday, 16 March 2016 at 20:44:12 UTC, Lucien wrote:
Hello,

I want to know if a port of an ip address is listening, actually, I've this :
http://pastebin.com/pZhm0ujy
(checking port 22/ssh)

It works, but it took me ~10min to scan 30 addresses.

How can reduce the expiration delay ?

I don't know if they apply here, but you can lower the send and receive timeouts for the socket. I'm not sure which (or if either) of them you want to tweak.

https://dlang.org/library/std/socket/socket_option.html


import core.thread;  // for .seconds
s.setOption(SocketOptionLevel.SOCKET, SNDTIMEO, 10.seconds);
s.setOption(SocketOptionLevel.SOCKET, RCVTIMEO, 10.seconds);


I guess you could also use a non-blocking socket and decide yourself when enough time has passed to declare it a failed attempt.

When it's non-blocking, all adresses have the open 22 open, but it isn't the case..

When I setOption like you said, it's too long.

Is there a good technique ?
nmap can do it in only ~2 seconds.

My current code :
--------------------------------------------------------

import std.process;
import std.socket;

import core.time;

// ...

// 32 for the moment
for (int i = 1; i < 32; i++) {
    string ip = "192.168.0."~to!string(i);
Socket s = new Socket(AddressFamily.INET, std.socket.SocketType.STREAM, ProtocolType.TCP);
    s.blocking = false;
//s.setOption(SocketOptionLevel.SOCKET, SocketOption.SNDTIMEO, 1.seconds); //s.setOption(SocketOptionLevel.SOCKET, SocketOption.RCVTIMEO, 1.seconds);
    InternetAddress ia = new InternetAddress(ip, 22);
    try {
        s.connect(ia);
        writeln("\nDONE: ", ip, ":22");
    } catch (Exception e) {
writeln("\n\nFAIL: ", ip, ":22 is unreachable :\n", e.toString(), "\n");
    }
    s.close();
}

// ...

-------------------------------------

Reply via email to