Программирование на C++ глазами хакера



             

Самый быстрый сканер портов - часть 2


  • chEndPort — порт, до которого нужно сканировать.
  • Портов очень много, и даже наш быстрый сканер затратит на это немало времени.

    Рис. 6.1. Окно будущей программы FastScan

    Теперь перейдем к программированию. Создайте обработчик события BN_CLICKED для кнопки, по нажатии которой должно начинаться сканирование. Код, который здесь нужно написать, достаточно большой (см. листинг 6.2), но несмотря на то, что он есть на компакт-диске, я советую набрать его вручную. Только в этом случае вы сможете разобраться в предназначении каждой строчки. Я же постараюсь дать вам всю необходимую информацию.

    Листинг 6.2. Быстрое сканирование портов
    void CFastScanDlg::OnBnClickedButton1() { char tStr[255]; SOCKET sock[MAX_SOCKETS]; int busy[MAX_SOCKETS], port[MAX_SOCKETS]; int iStartPort, iEndPort, iBusySocks = 0; struct sockaddr_in addr; fd_set fdWaitSet;

    WSADATA wsd; if (WSAStartup(MAKEWORD(2,2), &wsd) != 0) { SetDlgItemText(IDC_STATUSTEXT, "Can't load WinSock"); return; }

    SetDlgItemText(IDC_STATUSTEXT, "Resolving host");

    chStartPort.GetWindowText(tStr, 255); iStartPort = atoi(tStr); chEndPort.GetWindowText(tStr, 255); iEndPort = atoi(tStr);

    chHostName.GetWindowText(tStr, 255);

    struct hostent *host=NULL; host = gethostbyname(tStr); if (host == NULL) { SetDlgItemText(IDC_STATUSTEXT, "Unable to resolve host"); return; }

    for (int i = 0; i < MAX_SOCKETS; i++) busy[i] = 0;

    SetDlgItemText(IDC_STATUSTEXT, "Scanning");

    while (((iBusySocks) || (iStartPort <= iEndPort))) { for (int i = 0; i < MAX_SOCKETS; i++) { if (busy[i] == 0 && iStartPort <= iEndPort) { sock[i] = socket (AF_INET, SOCK_STREAM, IPPROTO_TCP); if (sock[i] < 0) { SetDlgItemText(IDC_STATUSTEXT, "Socket filed"); return; } iBusySocks++; addr.sin_family = AF_INET; addr.sin_port = htons (iStartPort); CopyMemory(&addr.sin_addr, host->h_addr_list[0], host->h_length);

    ULONG ulBlock; ulBlock = 1; if (ioctlsocket(sock[i], FIONBIO, &ulBlock) == SOCKET_ERROR) { return; }




    Содержание  Назад  Вперед