Hi ppl! I want to scan the local network to find nodes with open 80 port.
code:
import core.thread, core.atomic;
import std.stdio, std.system, std.file, std.conv, std.datetime, std.socket, std.socketstream, std.stream;
import vibe.core.log;
import vibe.d;

void main()
{
        ushort port = 80;
        auto stIP ="192.168.110.";
        ushort startIP = 1;
        uint size_buf;
        for (ushort i = 1; i < 150; i += size_buf)
        {
                auto socksGlobal = new SocketSet;
                auto socks = new SocketSet;
                size_buf = socksGlobal.max;
writeln("start cycle ", stIP, i, "\t size socks max ", size_buf);
                ushort byteIP = i;
                Socket [] ar_sock;
                ar_sock.length = size_buf;
                foreach (ref msa; ar_sock)
                {
                        msa = new TcpSocket();
                        msa.blocking = false;
                        socksGlobal.add(msa);
                        auto addrr = stIP~to!string(byteIP);
                        byteIP++;

                        auto objAddr = new InternetAddress(addrr, port);
                        try
                        {
                                msa.connect(objAddr);
                        }
                        catch (SocketException e)
                        {
                                writeln(e.msg);
                        }
                }
                auto ipC = 0;
                while(ipC < 5)
                {
                        ipC++;
                        int re = 0;
                        foreach (ref msa; ar_sock)
                        {
                                if (socksGlobal.isSet(msa))
                                        socks.add(msa);
                        }
                        try
                        {
                                re = Socket.select(null, socks, null 
,dur!"seconds"(3));
                        }
                        catch (SocketException e)
                        {
                                writeln(e.msg);
                        }
                        st = Clock.currTime(UTC());
writeln(st.toSimpleString~"\t\t: select res : ", re, " sock seln", socksGlobal.selectn);

                                foreach (ref msa; ar_sock)
                                {
                                        if (socks.isSet(msa))
                                        {
                                                st = Clock.currTime(UTC());
                                                auto addrr = 
to!string(msa.remoteAddress);
                                                writeln(st.toSimpleString~"\t\t: 
"~addrr~" online");
                                                socksGlobal.remove(msa);
                                        }
                                        //msa.close();
                                }
                        socks.reset();
                }
                foreach (ref msa; ar_sock)
                {
                        msa.shutdown(SocketShutdown.BOTH);
                        msa.close();
                }
                socksGlobal.reset();
        }
}

output:
start cycle 192.168.110.1        size socks max 64
2014-Nov-06 12:51:59.46875Z             : select res : 22 sock seln64
2014-Nov-06 12:51:59.46875Z             : 192.168.110.6:80 online
2014-Nov-06 12:51:59.484375Z            : 192.168.110.9:80 online
2014-Nov-06 12:51:59.484375Z            : 192.168.110.10:80 online
2014-Nov-06 12:51:59.484375Z            : 192.168.110.11:80 online
2014-Nov-06 12:51:59.484375Z            : 192.168.110.12:80 online
2014-Nov-06 12:51:59.484375Z            : 192.168.110.14:80 online
2014-Nov-06 12:51:59.484375Z            : 192.168.110.15:80 online
2014-Nov-06 12:51:59.484375Z            : 192.168.110.16:80 online
2014-Nov-06 12:51:59.484375Z            : 192.168.110.17:80 online
2014-Nov-06 12:51:59.484375Z            : 192.168.110.18:80 online
2014-Nov-06 12:51:59.484375Z            : 192.168.110.19:80 online
2014-Nov-06 12:51:59.484375Z            : 192.168.110.20:80 online
2014-Nov-06 12:51:59.484375Z            : 192.168.110.21:80 online
2014-Nov-06 12:51:59.484375Z            : 192.168.110.22:80 online
2014-Nov-06 12:51:59.484375Z            : 192.168.110.23:80 online
2014-Nov-06 12:51:59.484375Z            : 192.168.110.24:80 online
2014-Nov-06 12:51:59.484375Z            : 192.168.110.26:80 online
2014-Nov-06 12:51:59.484375Z            : 192.168.110.27:80 online
2014-Nov-06 12:51:59.484375Z            : 192.168.110.28:80 online
2014-Nov-06 12:51:59.484375Z            : 192.168.110.29:80 online
2014-Nov-06 12:51:59.484375Z            : 192.168.110.30:80 online
2014-Nov-06 12:51:59.484375Z            : 192.168.110.32:80 online
2014-Nov-06 12:52:00.0625Z              : select res : 1 sock seln42
2014-Nov-06 12:52:00.0625Z              : 192.168.110.35:80 online
2014-Nov-06 12:52:00.0625Z              : select res : 1 sock seln41
2014-Nov-06 12:52:00.0625Z              : 192.168.110.31:80 online
2014-Nov-06 12:52:00.421875Z            : select res : 1 sock seln40
2014-Nov-06 12:52:00.421875Z            : 192.168.110.34:80 online
2014-Nov-06 12:52:03.421875Z            : select res : 0 sock seln39
start cycle 192.168.110.65       size socks max 64
2014-Nov-06 12:52:06.453125Z            : select res : 0 sock seln64
2014-Nov-06 12:52:09.453125Z            : select res : 0 sock seln64
2014-Nov-06 12:52:12.453125Z            : select res : 0 sock seln64
2014-Nov-06 12:52:15.453125Z            : select res : 0 sock seln64
2014-Nov-06 12:52:18.453125Z            : select res : 0 sock seln64
start cycle 192.168.110.129      size socks max 64
2014-Nov-06 12:52:21.46875Z             : select res : 0 sock seln64
2014-Nov-06 12:52:24.46875Z             : select res : 0 sock seln64
2014-Nov-06 12:52:27.46875Z             : select res : 0 sock seln64
2014-Nov-06 12:52:30.46875Z             : select res : 0 sock seln64
2014-Nov-06 12:52:33.46875Z             : select res : 0 sock seln64

The program doesn't find the address after IP 192.168.110.65
Why?
What can be improved in the program?
Where can i read more about dlang sockets?

Reply via email to