23,215
社区成员




int
libnet_write_link(libnet_t *l, u_int8_t *packet, u_int32_t size)
{
int c;
#if (HAVE_PACKET_SOCKET)
struct sockaddr_ll sa;
#else
struct sockaddr sa;
#endif
if (l == NULL)
{
return (-1);
}
memset(&sa, 0, sizeof (sa));
#if (HAVE_PACKET_SOCKET)
sa.sll_family = AF_PACKET;
sa.sll_ifindex = get_iface_index(l->fd, l->device);
if (sa.sll_ifindex == -1)
{
return (-1);
}
sa.sll_protocol = htons(ETH_P_ALL);
#else
strncpy(sa.sa_data, l->device, sizeof (sa.sa_data) - 1);
sa.sa_data[sizeof (sa.sa_data) - 1] = 0;
#endif
c = sendto(l->fd, packet, size, 0,
(struct sockaddr *)&sa, sizeof (sa));
if (c != size)
{
snprintf(l->err_buf, LIBNET_ERRBUF_SIZE,
"libnet_write_link(): only %d bytes written (%s)\n", c,
strerror(errno));
}
return (c);
}