Сетевое программирование

Тема в разделе "Общие вопросы по С и С++", создана пользователем GOGA, 11 апр 2007.

  1. GOGA

    GOGA Гость

    Здравствуйте все кто шарит и не очень в программировании на С/С++! Помогите, пожалуйста, начинающему программисту и еще практическти не шарящему в программировании сокетов решить одну маленькую, но важную задачку.
    Подскажите, как при написании сетевого приложения, ориентированного для сервера, на С++ определить IP адрес подключившегося клиента, если сработала функция accept? Заранее устанавливается прослушивание определенного порта и прием сообщений с любого адреса.


    ---
    Заранее ОГРОМНОЕ СПАСИБО!
     
  2. SunSanych

    SunSanych Well-Known Member

    Регистрация:
    28 июн 2006
    Сообщения:
    71
    Симпатии:
    0
    А в чем проблема-то?
    Открываем MSDN, ищем описание функции accept:

    SOCKET accept(
    SOCKET s,
    struct sockaddr* addr,
    int* addrlen
    );

    Смотрим на второй параметр - указатель на структуру sockaddr. Смотрим ее описание:

    struct sockaddr_in {
    short sin_family;
    u_short sin_port;
    struct in_addr sin_addr;
    char sin_zero[8];
    };

    sin_addr - это и есть IP подключившегося клиента

    Тоесть создаешь экземпляр структуры sockaddr и помещаешь ее адресс в вызов функции accept. Если функция отработает без ошибок, в этой структуре будет лежать IP подключившегося клиента. Примерно так

    SOCKET listenSocket; \\ создан ранее
    SOCKET acceptSocket;
    sockaddr addr;
    int len = sizeof(sockaddr);

    acceptSocket = accept(s, &addr, &len);
    if (acceptSocket == INVALID_SOCKET) {
    printf("accept failed: %d\n", WSAGetLastError());
    closesocket(listenSocket);
    WSACleanup();
    return 1;
    } else
    printf("Client connected.\n");
     
  3. GOGA

    GOGA Гость

    Спасибо БОЛЬШОЕ за совет :( Теперь все нормально работает!
     
  4. GOGA

    GOGA Гость

    Здравствуйте программеры на С/С++. Еще один вопрос, немного касающийся сетевого программирования. Мне необходимо написать прогу, которая с помощью правил нечеткой логики должна выявлять атаку на узел. Только вот проблема у меня, как у начинающего и тупого программиста заключается в том, что я абсолютно пока еще ничего не шарю в защите информации и ее реализации. Я написал прогу, которая сканит порты и печает содержимое приходящих пакетов на экран. Теперь не могу понять, от чего оттолкнуться и с чего начать, чтобы определить атаку на хост. Я предполагаю, что надо анализировать сигнатуру поступающей инфы, только вот правильна ли моя идея, точно не уверен. Может необходимо определять атаку по какому-то другому признаку, например в литературе пишут, что по времени жизни виртуального порта или по каким-либо другим признакам? Подскажите пожалуйста свое мнение.
    Да, и еще, если необходимо анализировать сигнатуру, то где можно взять образцы сигнатур, содержащие атаки?

    Заранее огромное СПАСИБО :)
     
Загрузка...

Поделиться этой страницей