Russian Qt Forum

Qt => Работа с сетью => Тема начата: Alukardd от Февраль 03, 2012, 22:51



Название: работа с реальными пакетами, виртуальные интерфейсы
Отправлено: Alukardd от Февраль 03, 2012, 22:51
Здравствуйте.

Пойдём от глобального: если возможно, то хотелось бы реализовать маршрутизацию пакетов
Непонятные подзадачи:
- как добиться promiscuous mode (слушать все протоколы и порты на интерфейсе) - хотя про это видимо лучше забыть, т.к. нужны права повышенные
- как использовать некий виртуальный интерфейс
            - использовать адрес loopback интерфейса (127.0.7.2, например - или я что-то не понимаю в этом мире?)
            - использовать дополнительный адрес на реальном физическом интерфейсе (в случае Linux, eth0:1, например)
        при этом так же нужны все протоколы и порты(у кого они есть - IP, например)

Допустим всего это невозможно добиться в разумные сроки одному человеку, тогда задача будет со скрежетом на зубах переформулирована в такую:
Забудем о возможности что-то принять из внешнего мира (т.к. все протоколы реализовать не удалось), тогда будем только устанавливать соединения сами и читать ответы. Соединения будут устанавливаться по запросу от других модулей программы (это не суть важно). Тогда вопрос - есть ли готовые структуры пакетов для TCP (вот это (http://ru.wikipedia.org/wiki/TCP#.D0.97.D0.B0.D0.B3.D0.BE.D0.BB.D0.BE.D0.B2.D0.BE.D0.BA_.D1.81.D0.B5.D0.B3.D0.BC.D0.B5.D0.BD.D1.82.D0.B0_TCP)), UDP или только что-то типа QHttp, QFtp, QtTelnet, что бы во внешний мир посылать? И можно ли в QTcpServer принять (соответственно, из QTcpSocket послать) различные структуры данных подряд - как такое обработать (write'у все равно что посылать, а вот как указать read'у что структура другая летит)?

p.s. наверное я навалил много не совсем понятных желаний - спрашивайте - постараюсь доходчиво ответить
p.p.s. вумными оборотами конечно можете ругаться (загуглю → попробую усвоить), но мои навыки программирования в целом и Qt в частности на начальном уровне (вернее на уровне структурного программирования на скриптовых языках). С ООП на каком-то приемлемом уровне знаком  :)


Название: Re: работа с реальными пакетами, виртуальные интерфейсы
Отправлено: SimpleSunny от Февраль 04, 2012, 00:10
Опишите задачу, а не то как вы хотите ее реализовать.


Название: Re: работа с реальными пакетами, виртуальные интерфейсы
Отправлено: Alukardd от Февраль 04, 2012, 00:16
Изначальная задача: эмулировать маршрутизатор (всю "внутреннюю" логику я думаю, что без особых проблем реализую)
Если это ппц как геморройно, то задача превращается в: симулировать маршрутизатор, но всё же что бы в одну сторону общение с внешним миром да было.


Название: Re: работа с реальными пакетами, виртуальные интерфейсы
Отправлено: SimpleSunny от Февраль 04, 2012, 12:15
Для windows можно использовать WinPCAP знакомство с которым можно начать с http://cherepovets-city.ru/insecure/reading/index.html
Для linux libpcap


Название: Re: работа с реальными пакетами, виртуальные интерфейсы
Отправлено: Alukardd от Февраль 04, 2012, 12:53
Эти библиотеки, конечно, помогут мне распарсить трафик, но кто мне даст его получить?
Я же вроде написал, что это видимо тупиковый вариант, т.к. нужны будут права root'овые (в винде LOCAL/SYSTEM) чтобы перевести интерфейс в неразборчивый режим.

Или с помощью них можно генерить свои пакеты и при этом не отправлять их на реальный интерфейс?

Основной вопрос в том есть ли готовые структуры (или классы) для работы с сетевыми пакетами протоколов (сеансового и транспортного уровней)?
И второй вопрос: можно ли через сокеты подряд передать две разные структуры (как их читать в таком случае)?


Название: Re: работа с реальными пакетами, виртуальные интерфейсы
Отправлено: Akon от Февраль 04, 2012, 19:32
Трафик сливается с низкого уровня - уровня драйверов.
В сорцах есть заголовочные файлы, описывающие сетевые протоколы.


Название: Re: работа с реальными пакетами, виртуальные интерфейсы
Отправлено: Alukardd от Февраль 04, 2012, 21:46
Спасибо.
Тут еще мысль родилась: можно ли использовать (создавать/управлять/удалять) TAP интерфейсы (в n'ом количестве)?
Это на мой взгляд решило бы мои проблемы полностью (хотя я не нашёл достойной литературы, что бы точно это утверждать).