>char dev[] ="rl0";
>static eth_t *dnet_eth;
>if ((dnet_eth = eth_open(dev)) == NULL)
>
> errx(1, "eth_open");
>
>if (eth_send(dnet_eth, packet, sizeof(packet)) != sizeof(packet))
>
> syslog(LOG_ERR, "couldn't send packet: %m");
>eth_close(dnet_eth);
>
>вот примерный код написал, нифига ничего не посылает
packet - это указатель на Ethernet frame, т.е. должны быть указаны корректные адреса,
в кадре указан тип сетевого пакета
/usr/include/net/ethernet.h:
struct ether_header {
u_char ether_dhost[ETHER_ADDR_LEN];
u_char ether_shost[ETHER_ADDR_LEN];
u_short ether_type;
}
ether_type= ETHERTYPE_IP
IP пакет должен быть сформирован верно (адреса, флаги, контрольная сумма).
Вот такой запуск tcpdump поможет в более подробном анализе Ethernet кадров:
tcpdump -XX -v -n -s 256 -i <ifname>