我想知道在创建框架后如何发送框架 .
我有下一个:
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数据包 . 我确实理解除返回之外的一切,因为我没有找到“发送”命令 .
谢谢 .
1 回答
libnet_write()就是这么做的 .
根据libnet / libnet-functions.h中的注释