The OpenNET Project / Index page

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



Индекс форумов
Составление сообщения

Исходное сообщение
"Модуль lapbether"
Отправлено Pavel515, 06-Мрт-19 18:11 
Здравствуйте


Есть такая штука

/*
*    "LAPB via ethernet" driver release 001
*
*    This code REQUIRES 2.1.15 or higher/ NET3.038
*
*    This module:
*        This module is free software; you can redistribute it and/or
*        modify it under the terms of the GNU General Public License
*        as published by the Free Software Foundation; either version
*        2 of the License, or (at your option) any later version.
*
*    This is a "pseudo" network driver to allow LAPB over Ethernet.
*
*    This driver can use any ethernet destination address, and can be
*    limited to accept frames from one dedicated ethernet card only.


Скажите, пожалуйста, как её использовать?
Делаю
insmod lapb
insmod lapbether
insmod x25
ifconfig lapb0 up
x25route add 33 lapb0

x25client 44 33 (<- программа создает x25 сокет и пытается установить соединение на X25 адрес 33. Маршрутизатор направляет пакет на устройство lapb0. Tcpdump показывает пакет 01 - запрос соединения)

с какими параметрами создавать socket
У меня получилость ТОЛЬКО принять этот байт программой (это просто sniffer. Ну уж если Tcpdump ловит...) (далее)
при попытке отправить - ошибка (понятно, что sniffer работает только по приему...)

# ./lapb3
len = 1
(01)
write error: 22(Invalid argument)

[ccode]
int main(int argc,char** argv)
{
    int fd,rc,nr,i;
    unsigned char packet[40];

    if((fd = socket(PF_PACKET,SOCK_RAW,htons(ETH_P_ALL))) == -1){
    printf("Socket error (%d)(%s)\n",errno,strerror(errno));
    return -1;
    }

    struct sockaddr_ll sll;
    struct ifreq ifr;

    memset( &sll, 0, sizeof( sll));
    memset( &ifr, 0, sizeof( ifr));

    strcpy( ifr.ifr_name, "lapb0");

    if(( ioctl( fd, SIOCGIFINDEX, &ifr))==-1)
    {
    printf( "error\n");
        return(-1);
    }
    sll.sll_family = AF_PACKET;
    sll.sll_ifindex = ifr.ifr_ifindex;
    sll.sll_protocol = htons(ETH_P_ALL);
      
    rc =  bind( fd, (struct sockaddr*)&sll, sizeof( sll));


    if(rc == -1){
    printf("Bind socket error (%d)(%s)\n",errno,strerror(errno));
    return -1;
    }

        
    nr = read(fd,packet,40);
    if(nr < 0){
        printf("Read socket error (%d)(%s)\n",errno,strerror(errno));
    return -1;
    }
    printf("len = %d\n",nr);
    for(i=0;i<nr;i++)printf("(X)",packet[i]);
    printf("\n");

    nr = write(fd,packet,1);
    if(nr != 1){
    printf("write error: %d(%s)\n",errno,strerror(errno));
    }

    close(fd);

    return 0;
}

[/ccode]

пробовал добавлять ip адрес и работать через AF_INET - вообще ничего не принимает
таким образом какой-то караул
Вопросы

socket(????? family, ???????? typ, ??????? protocol <- ну тут исходя из исходников lapcether.c вроде как ETH_P_DEC (?)
с bind-ом понятнее (пристыковываем к устройству)

Если кто встречался - помогите, пожалуйста.

С уважением, Павел

 

Ваше сообщение
Имя*:
EMail:
Для отправки новых сообщений в текущей нити на email укажите знак ! перед адресом, например, !user@host.ru (!! - не показывать email).
Более тонкая настройка отправки ответов производится в профиле зарегистрированного участника форума.
Заголовок*:
Сообщение*:
 
При общении не допускается: неуважительное отношение к собеседнику, хамство, унизительное обращение, ненормативная лексика, переход на личности, агрессивное поведение, обесценивание собеседника, провоцирование флейма голословными и заведомо ложными заявлениями. Не отвечайте на сообщения, явно нарушающие правила - удаляются не только сами нарушения, но и все ответы на них. Лог модерирования.



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

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