Собсна хочу написать свой ICQ гейт на подобии этого: http://www.exploit.in/modules.php?name=news&file=view&news_id=1512 Как лучше это организовать?Думаю сделать так: 1)Принимаем трафик на свой порт 2)Выдёргиваем с него то что нам надо 3)Перенаправляем его на реальный ICQ сервер. Схема реальная?В какую сторону гуглить?
Проще socks5 сервер написать и дополнить его нужным функционалом. проще потому что не нужно реализовывать ВЕСЬ протокол, а лишь читать/изменять из трафика нужное. Я начинал делать и затормозил на реализации сокса /thread217458.html
Там софт построен на схеме ретранслятора.Интересно было бы почитать подробнее об этом, но инфы я найти не могу. P.S Писать через прокси не хочется ибо в некоторых клиентах нет возможности использовать прокси-сервер.
А чем прокси сервер тебе не "ретранслятор". Увидел незнакомое слово и все тут Вот тебе простейший "ретранслятор" Code: void copy_data(int src, int dst) { static char buf[BUFSIZ]; ssize_t nr, nw, off; while ((nr = read(src, buf, sizeof (buf))) == -1) { if (errno != EINTR) { //syslog(LOG_ERR, "read failed: %m"); exit(EXIT_FAILURE); } } if (nr == 0) /* reached EOF */ done++; for (off = 0; nr; nr -= nw, off += nw) { if ((nw = write(dst, buf + off, (size_t) nr)) == -1) { //syslog(LOG_ERR, "write failed: %m"); exit(EXIT_FAILURE); } } } ... // применимо к сокетам A - 1 соединение B - 2 соединение FD_ZERO(&rdset); FD_SET(A, &rdset); FD_SET(B, &rdset); select(n, &rdset, NULL, NULL, NULL); if (FD_ISSET(A, &rdset)) copy_data(A, B); if (FD_ISSET(B, &rdset)) copy_data(B, A); aka туннель Кхм ну не хочешь прокси как вариант пиши обычный сервер при подключении клиента подключайся серверу icq и делай туннель между клиентским сокетом и сокетом сервера icq.