• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

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

  • Автор темы GOGA
  • Дата начала
G

GOGA

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


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

SunSanych

А в чем проблема-то?
Открываем 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");
 
G

GOGA

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

GOGA

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

Заранее огромное СПАСИБО :)
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!