The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]




Версия для распечатки Пред. тема | След. тема
Новые ответы [ Отслеживать ]
SLIP и PPP сокеты в программах на C . , !*! Ruslan, 09-Сен-12, 05:13  [смотреть все]
Всем доброго времени суток .
Подскажите пожалуйста , каким образом можно создать сокет работающий по протоколу SLIP или PPP .
Все действия должны производиться над настроенным файловым дескриптором типа /dev/ttySn .
Может юзать AF_UNIX ?
  • SLIP и PPP сокеты в программах на C . , !*! Andrey Mitrofanov, 08:31 , 09-Сен-12 (1)
    > Подскажите пожалуйста , каким образом можно создать сокет работающий по протоколу SLIP или PPP .

    Выбирай:
    1/ Никак. Сокеты не "работают по протоколу", это эээ... байтовые трубы.
    2/ Запусти на том конце slirp (ключи -- в ман слирп внизапно).

    > над настроенным файловым дескриптором типа /dev/ttySn . Может юзать AF_UNIX ?

    • SLIP и PPP сокеты в программах на C . , !*! RUSLAN_S, 23:33 , 12-Сен-12 (3)
      >> Подскажите пожалуйста , каким образом можно создать сокет работающий по протоколу SLIP или PPP .
      > Выбирай:
      > 1/ Никак. Сокеты не "работают по протоколу", это эээ... байтовые трубы.
      > 2/ Запусти на том конце slirp (ключи -- в ман слирп внизапно).
      >> над настроенным файловым дескриптором типа /dev/ttySn . Может юзать AF_UNIX ?

      Всем спасибо , всё решилось как всегда очень просто - простой утилиткой под названием SLATTACH . Которая позволяет навязать IP на последовательную линию .
      Сокеты - это байтовые трубы ??? Может вы с PIPE-ами путаете ???

  • SLIP и PPP сокеты в программах на C . , !*! pavlinux, 02:19 , 10-Сен-12 (2)
    > Подскажите пожалуйста , каким образом можно создать сокет работающий по протоколу SLIP или PPP .

    SLIP и PPP - это протоколы канального уровня, их задача - проложить дорогу от железки
    до сетевой подсистемы ОС (и обратно, хотя не обязательно), и делается это с помощью драйвера (модуля).

  • SLIP и PPP сокеты в программах на C . , !*! RUSLAN_S, 23:53 , 12-Сен-12 (4)
    > Всем доброго времени суток .
    > Подскажите пожалуйста , каким образом можно создать сокет работающий по протоколу SLIP
    > или PPP .
    > Все действия должны производиться над настроенным файловым дескриптором типа /dev/ttySn
    > .
    > Может юзать AF_UNIX ?

    SLIP - инкапсуляция IP на последовательной линии - самый старый способ передачи IP в последовательную линию .
    Сначала создаём новый сетевой интерфейс поверх последовательной линии :

    slattach -s 4800 -p slip /dev/ttyS0

    Теперь оба терминала заблокированы на операциях , а через нуль-модемный кабель установлено сетевое соединение .
    Присваиваем ему сетевой адрес :

    ifconfig sl0 192.168.5.1

    #etc/network/interfaces

    sl0 Link encap:Serial Line IP
        inet addr:192.168.5.1  P-t-P:192.168.5.1   Mask:255.255.255.255
        UP POINTOPOINT RUNNING NOARP MULTICAST   MTU:296  Metric:1
        RX packets:0 errors:0 dropped:0 overruns:0 frame:0
        TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
        collisions:0 txqueuelen:10
        RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)

    • SLIP и PPP сокеты в программах на C . , !*! pavlinux, 02:08 , 13-Сен-12 (5)
      > самый старый способ передачи IP в последовательную линию.

      Мог бы просто задать вопрос - "Как соединить два компа через СОМ-порт"

      • SLIP и PPP сокеты в программах на C . , !*! RUSLAN_S, 07:59 , 14-Сен-12 (6)
        > Мог бы просто задать вопрос - "Как соединить два компа через СОМ-порт"

        Как соединить 2 компа через COM-порт мне известно :) .
        Дело в том , что мне не нравится интерфейс termios .
        Легче навязать на порт IP , открыть сокет в своём приложении и уже туда sendit-ь всё .

        • SLIP и PPP сокеты в программах на C . , !*! pavlinux, 04:16 , 15-Сен-12 (7)
          > Дело в том , что мне не нравится интерфейс termios .

          А кто те сказал, что мы тебе посоветуем termios, делать нам нефига?!
          Я б вот pppd посоветовал, он разрывы и потери лучше обрабатывает и
          восстанавливает http://tldp.org/HOWTO/PPP-HOWTO/direct.html
          Хотя, если между компами два метра - пофигу.


          • SLIP и PPP сокеты в программах на C . , !*! RUSLAN_S, 03:04 , 15-Окт-12 (9)
            Вопрос ведь звучал "SLIP и PPP сокеты В ПРОГРАММАХ НА C" ,
            вот и решил - надо дописать , раз уж взялся .
            Вешаю 2 slip-интерфейса на 2 USB-RS232-переходника ,
            настраиваю ip на "192.168.5.1" и "192.168.5.2" .
            Пингую - пинг есть до обоих .
            ===============================
            slattach -dv -p slip -s 9600 /dev/ttyUSB0 &
            slattach -dv -p slip -s 9600 /dev/ttyUSB1 &
            ifconfig sl0 192.168.5.1
            ifconfig sl1 192.168.5.2
            ===============================
            Дальше код на C :
            ===============================
            #define _BSD_SOURCE || _SVID_SOURCE //feature test macro requirement for glibc for inet_aton() .

            #include <sys/poll.h> //poll ...
            #include <sys/types.h>
            #include <sys/socket.h>
            #include <netinet/in.h>
            #include <arpa/inet.h> //inet_aton ...
            #include <stdio.h>    //perror
            #include <stdlib.h> //exit ...

            #define RECEIVE_FLAGS 0
            #define SEND_FLAGS 0
            #define HOST_ADDRESS "192.168.5.1"
            #define RCVR_ADDRESS "192.168.5.2"

            char message[] = "F_Message";
            char buffer[1024];

            int snd_error(int exit_code,char *msg)
            {
                perror(msg);
                exit(exit_code);
            };

            void *recvall(int rcvr, struct sockaddr_in *addr, void *buf, int len) //receiving all the data array , a parts.
            {
                int rcvd = 0;
                void *bufcpy = buf;
                socklen_t addrlen = (socklen_t)sizeof(*addr);
                while(len)
                {
                    rcvd = recvfrom(rcvr,buf,len,RECEIVE_FLAGS,(struct sockaddr *)addr,&addrlen);
                    if(-1 == rcvd)
                        snd_error(4,"in funktion recvall , recvfrom : ");
                    len -= rcvd;
                    buf += rcvd;
                }
                return bufcpy;
            };

            void sendall(int sndr, struct sockaddr_in *addr, void *msg, int len) //sending all the data array , a parts
            {
                int sendd = 0;
                socklen_t addrlen = (socklen_t)sizeof(*addr);
                while(len)
                {
                    sendd = sendto(sndr,msg,len,SEND_FLAGS,(struct sockaddr *)addr,addrlen);
                    if(-1 == sendd)
                        snd_error(5,"in funktion sendall , sendto : ");
                    len -= sendd;
                    msg += sendd;
                }
            };

            int main(int argc , char *argv[])
            {

                int HOST_SOCK,RCVR_SOCK; //in upper case for highlihting .
                struct sockaddr_in host_addr;
                struct sockaddr_in rcvr_addr;

                HOST_SOCK = socket(AF_INET,SOCK_DGRAM,0);
                if(HOST_SOCK<0)
                    snd_error(1,"in funktion main , socket : ");

                RCVR_SOCK = socket(AF_INET,SOCK_DGRAM,0);
                if(RCVR_SOCK<0)
                    snd_error(2,"in funktion main , socket : ");

                host_addr.sin_family = AF_INET;
                host_addr.sin_port = htons(3000);
                if(0 == inet_aton(HOST_ADDRESS,&(host_addr.sin_addr)))
                    snd_error(2,"in funktion main , inet_aton : ");

                if(-1 == bind(HOST_SOCK,(struct sockaddr *)&host_addr,sizeof(host_addr)))
                    snd_error(3,"in funktion main , bind : ");

                rcvr_addr.sin_family = AF_INET;
                rcvr_addr.sin_port = htons(3000);
                if(0 == inet_aton(RCVR_ADDRESS,&(rcvr_addr.sin_addr)))
                    snd_error(6,"6 in funktion main , inet_aton : ");

                if(-1 == bind(RCVR_SOCK,(struct sockaddr *)&rcvr_addr,sizeof(rcvr_addr)))
                    snd_error(4,"in funktion main , bind : ");

                sendall(HOST_SOCK,&rcvr_addr,message,sizeof(message));
                recvall(RCVR_SOCK,&host_addr,buffer,sizeof(message));
                printf("%s\n",buffer);

                return 0;
            };
            ===============================
            $./a.out
            F_Message
            ===============================
            При извлечении любого из переходников программа выдаёт ошибки при вызове bind и данные не проходят . Что свидетельствует о передаче пакетов именно по проводу :)

  • SLIP и PPP сокеты в программах на C . , !*! RUSLAN_S, 03:08 , 01-Окт-12 (8)
    Вчера попинговал свой USB-RS232 переходничок :
    ================================
    slattach -dm -p slip -s 9600 /dev/ttyUSB0 &
    ================================
    slattach: tty_open: looking for lock
    slattach: tty_open: trying to open /dev/ttyUSB0
    slattach: tty_open: /dev/ttyUSB0 (fd=3) slip started on /dev/ttyUSB0 interface sl0
    slattach: tty_set_speed: 0
    ================================
    ifconfig sl0 192.168.5.1
    ifconfig sl0
    ================================
    sl0       Link encap:Serial Line IP  
              inet addr:192.168.5.1  P-t-P:192.168.5.1  Mask:255.255.255.255
              UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:296  Metric:1
              RX packets:0 errors:0 dropped:0 overruns:0 frame:0
              TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 txqueuelen:10
              RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)
    ================================
    ping 192.168.5.1
    ================================
    PING 192.168.5.1 (192.168.5.1) 56(84) bytes of data.
    64 bytes from 192.168.5.1: icmp_req=1 ttl=64 time=0.034 ms
    64 bytes from 192.168.5.1: icmp_req=2 ttl=64 time=0.033 ms
    64 bytes from 192.168.5.1: icmp_req=3 ttl=64 time=0.039 ms
    64 bytes from 192.168.5.1: icmp_req=4 ttl=64 time=0.035 ms

    --- 192.168.5.1 ping statistics ---
    4 packets transmitted, 4 received, 0% packet loss, time 2999ms
    rtt min/avg/max/mdev = 0.033/0.035/0.039/0.004 ms




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2025 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру