Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Сети > Cетевое програмирование на Builder


Автор: witeman 6.8.2005, 22:40
Пожалуйста подскажите как просканировать определенный
промежуток IP, на конкретный порт. Заранее благодарен.
smile

Автор: WhiteSpirit 20.11.2005, 18:03
Смотри в книге Фленова "Делфи глазами Хакера"

Автор: Kill_em_all 22.11.2005, 12:41
Код

void CFTPscanDlg::OnBnClickedButton1()
{
    WSAData wsd;
    if(WSAStartup(MAKEWORD(2,2), &wsd)!=0)
    {
        AfxMessageBox("Я немогу загрузить ws2");
        return;
    }
    SOCKET s=socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
    if(s==SOCKET_ERROR)
    {
        AfxMessageBox("Коля, ты дурак! Я немогу создать сокет");
        return;
    }
    SOCKADDR_IN serv;
    char begin_ip[256];
    char port[256];
    int start_ip, end_ip;

    char part1[4],part2[4],part3[4],part4[4],part5[4];
    
    
    m_ed1.GetWindowText(part1, 4);
    m_ed2.GetWindowText(part2, 4);
    m_ed3.GetWindowText(part3, 4);
    m_ed5.GetWindowText(part4, 4);
    m_ed6.GetWindowText(part5, 4);
    m_port.GetWindowText(port, 10);
    int iPort=atoi(port);
    start_ip=atoi(part4);
    end_ip=atoi(part5);
    char szOut[256];
    serv.sin_family=AF_INET;
    serv.sin_port=htons(iPort);
    while(start_ip<=end_ip)
    {
        itoa(start_ip, part4, 10);
        strcpy(begin_ip, part1);
        strcat(begin_ip,".");
        strcat(begin_ip, part2);
        strcat(begin_ip,".");
        strcat(begin_ip, part3);
        strcat(begin_ip,".");
        strcat(begin_ip, part4);
        serv.sin_addr.s_addr=inet_addr(begin_ip);
        m_list.AddString(begin_ip);
        
        if(connect(s, (SOCKADDR*)&serv, sizeof(serv)))
        {
            sprintf(szOut, "%1s  closed", begin_ip);
            m_list.AddString(szOut);
        }
        else
        {
            sprintf(szOut, "%1s  ------------- OPENED", begin_ip);
            m_list.AddString(szOut);
            shutdown(s, SD_BOTH);
            closesocket(s);
            s=socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
        }
        ProcessMessages();
        start_ip++;
    }
    closesocket(s);
    WSACleanup();

}



m_ed - переменные-члены, относящиеся к Edit box'ам ввода IP(начального и конечного)
m_port - поле ввода нужного порта

Я не уверен, что это хороший вариант

Автор: witeman 12.12.2005, 08:52
smile Большое спасибо.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)