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

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

GOGA

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


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

SunSanych

Well-known member
28.06.2006
71
0
#2
А в чем проблема-то?
Открываем 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

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

GOGA

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

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