LINUX.ORG.RU

Очень В А Ж Н О !


0

0

Как открыть сокет чтобы сделать listen tcp пакетов на PPP устройстве??? Для Etherneta сокет открывается так: S=SOCKET(AF_INET, SOCKET_PACKET, ETHERTIPE_IP) А как сделать для PPP ?????????

anonymous

#include <net/if.h>
#include <sys/ioctl.h>

#define SA struct sockaddr;

int sock;
struct ifreq if;
struct sockaddr_in;
char* interface_name = "ppp0";
int rc;

sock = socket (AF_INET,SOCK_PACKET,0x300);
bzero (&in,sizeof(in));
in.sin_family = AF_INET;
strcpy ((void*)&in.sin_port,interface_name);
rc=bind (sock,(SA*)&in,sizeof(in));
if (rc<0) {
perror ("bind");
return 1;
}
strcpy (req.ifr_name,interface_name);

rc=ioctl (sock,SIOCGIFFLAGS,&req);
req.ifr_flags |= IFF_PROMISC;
rc=ioctl (sock,SIOCSIFFLAGS,&req);

Таким образом SOCK_PACKET привязывается к конкретному интерфейсу.
Ну естественно необходимо знать как именно интерфейс называется.
Если это неизвестно (ppp0,ppp1 etc) то есть способы получения
всех интерфейсов и их параметров.
Все это барахло с PROMISC mode это для сетевых карт исключительно.
Так все эти sniffers работают. Для PPP этот флаг даром не нужен.
Я привел это здесь, если нужно для более общего варианта.
Если что-то не повалит ... пишите.

ovsov
()

#include <net/if.h>
#include <sys/ioctl.h>

#define SA struct sockaddr;

int sock;
struct ifreq if;
struct sockaddr_in;
char* interface_name = "ppp0";
int rc;

sock = socket (AF_INET,SOCK_PACKET,0x300);
bzero (&in,sizeof(in));
in.sin_family = AF_INET;
strcpy ((void*)&in.sin_port,interface_name);
rc=bind (sock,(SA*)&in,sizeof(in));
if (rc<0) {
perror ("bind");
return 1;
}
strcpy (req.ifr_name,interface_name);

rc=ioctl (sock,SIOCGIFFLAGS,&req);
req.ifr_flags |= IFF_PROMISC;
rc=ioctl (sock,SIOCSIFFLAGS,&req);

Таким образом SOCK_PACKET привязывается к конкретному интерфейсу.
Ну естественно необходимо знать как именно интерфейс называется.
Если это неизвестно (ppp0,ppp1 etc) то есть способы получения
всех интерфейсов и их параметров.
Все это барахло с PROMISC mode это для сетевых карт исключительно.
Так все эти sniffers работают. Для PPP этот флаг даром не нужен.
Я привел это здесь, если нужно для более общего варианта.
Если что-то не повалит ... пишите.

ovsov
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.