作成したフレームを送信する方法を知りたいです。
私は次のものを持っています:
int arp_send(libnet_t *l, int op, u_char *sha, in_addr_t spa, u_char *tha, in_addr_t tpa) {
libnet_ptag_t t;
if (sha == NULL &&
(sha = (u_char *)libnet_get_hwaddr(l)) == NULL) {
return (-1);
}
if (spa == 0) {
if ((spa = libnet_get_ipaddr4(l)) == -1)
return (-1);
}
if (tha == NULL)
tha = (u_char *)"\xff\xff\xff\xff\xff\xff";
libnet_clear_packet(l);
/*
* Build the packet, remmebering that order IS important. We must
* build the packet from lowest protocol type on up as it would
* appear on the wire. So for our ARP packet:
*
* -------------------------------------------
* | Ethernet | ARP |
* -------------------------------------------
* ^ ^
* |------------------ |
* libnet_build_ethernet()--| |
* |
* libnet_build_arp()-----------|
*/
t = libnet_build_arp(
ARPHRD_ETHER, /* hardware addr */
ETHERTYPE_IP, /* protocol addr */
6, /* hardware addr size */
4, /* protocol addr size */
op, /* operation type */
sha, /* sender hardware addr */
(u_int8_t *)&spa, /* sender protocol addr */
tha, /* target hardware addr */
(u_int8_t *)&tpa, /* target protocol addr */
NULL, /* payload */
0, /* payload size */
l, /* libnet context */
0); /* libnet id */
if (t == -1)
{
fprintf(stderr, "Can't build ARP header: %s\n", libnet_geterror(l));
return -1;
}
t = libnet_autobuild_ethernet(
tha, /* ethernet destination */
ETHERTYPE_ARP, /* protocol type */
l); /* libnet handle */
if (t == -1)
{
fprintf(stderr, "Can't build ethernet header: %s\n",
libnet_geterror(l));
return -1;
}
return libnet_write(l);
}
ネット上で、何もないところから arp パケットを作成するコードを見つけました。「送信」コマンドが見つからないため、リターン以外はすべて理解しています。
ありがとうございました。