>> с самого начала нужно было сказать что вы знаете про
>>radius+mpd и про telnet 127.0.0.1 5005 кажись по умолчанию порт консили
>>mpd сервера
>>
>>
>> тогда праивльно сформулируйте вопрос!
>> вы хотите узнать про инкапсуляцию ppp протокола ?
>Вчасности и про это тоже.
>> {ethernet {ip {udp|tcp{gre{ppp{ ...}}}}}}
>Насколько я понял, кадр pptp выглядит следующим образом:
>{ethernet {ip {gre {ppp{ip {udp|tcp|etc...}}}}}}
нет
попытаюсь обьяснить
есть два компьютера A ip(1.1.1.1) <--> B ip(1.1.1.2)
допустим A это роутер который имеет выход в интернет и на нем запущен vpn сервер
B это клиент
1. vpn сервер запускаеться поверх tcp/ip обычно по порту 1723 и слушает инкапсулироване tcp/ip за которыми идут фреймы gre протокола
2. и так клиент B коннектиться(посылает) запрос tcp/ip{gre} - на указаный айпи 1.1.1.1:1723
3. сервер принимает запрос - обрабатывает его и создает соединение
server A ip(1.1.1.1) <---{ tcp/ip {gre {.....} } }---> B ip(1.1.1.2) client
и так мы получаем gre тунель
4. инкапсуляция PPP
server A ip(1.1.1.1) <---{ tcp/ip {gre { PPP {....} } } }---> B ip(1.1.1.2) client
5. клиент B ip(1.1.1.2) начинает этап инициализации PPP протокола
етапы инициализации PPP протокола AUTH{PAP|CHAP-MD5|CHAP-MS1|CHAPMS-2},IPCP,CCP,LCP.... etc (советую найти полную документацию и почитать)
6. на этапе инициализации IPCP клинет<->сервер договариваються об выделении ip адрессов для отдельных виртуальных интерфейсов котрые создадуться(подымуться) в случае успешного соедениения
7.в случае успеха вся схема р выглядит следующим образом
interface PPP0 ip(2.2.2.1) <--> ip(2.2.2.2) (в созданом виртуальном интерфейсе разворачиваються/заворачиваються(инкапсулируються) фреймы PPP {пришедшие через тунель gre до уровня tcp/ip}/{пришедшие с вернего уровня tcp/ip}) - со стороны сервера
server A ip(1.1.1.1) <---{ tcp/ip {gre { PPP {....} } } }---> B ip(1.1.1.2) client
interface PPP0 ip(2.2.2.2) <--> ip(2.2.2.1) (в созданом виртуальном интерфейсе разворачиваються/заворачиваються(инкапсулируються) фреймы PPP {пришедшие через тунель gre до уровня tcp/ip}/{пришедшие с вернего уровня tcp/ip}) - со стороны клиента
возможно немного не понятно - но извиняюсь я учителем работать не нанимался.
>libpcap передает указатель на ethernet пакет,(тестовый пример программы, которой я пользуюсь можно
>посмотреть выше) я здвигаю указатель на 14 байт иполучаю указатель на
>ip пакет, из заголовка которого я вытаскиваю внешние ip по которым
>проходит соединение. Далее сдвигаюсь на размер ip заголовка, получаю указатель либо
>на tcp,udp,icmp, и в часности то, что мне нужно, gre заголовок.
>С tcp, udp все понятно и работает. Вопрос в том какова
>структура gre заголовка, и можно ли из него достать внутренние ip
>адреса соединения.
>В /usr/include/net нашел хидер if_gre.h, там описана структура
>struct gre_softc {
> struct ifnet sc_if;
> LIST_ENTRY(gre_softc) sc_list;
> int gre_unit;
> int gre_flags;
> struct in_addr g_src;
> /* source address of gre packets */
> struct in_addr g_dst;
> /* destination address of gre packets */
>и т.д.
>}
>Я так понял что это как раз структура заголовка gre пакета. Подключил
>объявил указатель на него.
это все не то
о структуре gre протокола можете найти в rfc или в pptpd(/usr/ports/net/poptop/) или mpd(/usr/ports/net/mpd)
>struct gre_soft *gr;
>сдвигаю ip заголовок
>gr = (struct gre_softc*)((int)ip + sizeof(*ip));
>компилю все без ошибок, добавляю следующие строки
>sprintf(src, "%s", inet_ntoa(gr->g_src));
>sprintf(dst, "%s", inet_ntoa(gr->g_dst));
>выдает следующее
>main_prog.cpp: In function `void if_ether(u_char *, const pcap_pkthdr *, const u_char *)':
>
>main_prog.cpp:106: invalid use of undefined type `struct gre_softc'
>main_prog.cpp:68: forward declaration of `struct gre_softc'
>main_prog.cpp:107: invalid use of undefined type `struct gre_softc'
>main_prog.cpp:68: forward declaration of `struct gre_softc'
>*** Error code 1
>Вот на чем в данный момент, закончились мои изыскания.
>> или о принципах работы vpn?
>Кое что про работу VPN я уже знаю из следующих статей
>http://www.hardline.ru/4/49/4189/
>http://kunegin.narod.ru/ref5/ipsec/doc07.htm
>https://www.opennet.ru/base/net/mpd_pptp_vpn.txt.html
>Есть информация и про ppp
>https://www.opennet.ru/docs/RUS/inet_book/3/ppp_35.html
>Из следующей статьи я почерпнул, что информацию которая мне нужна всетаки можно
>достать из пакета pptp:
>http://program.rin.ru/razdel/html/932-2.html