无法在c中读取arp数据包
can't read arp packets in c
我有以下简单的代码来捕获发送到我的设备的所有 arp 数据包,但它没有打印任何东西
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <arpa/inet.h>
#include <net/ethernet.h>
int main(){
int sock;
char recvbuf[2048];
if((sock=socket(PF_PACKET,SOCK_DGRAM,htons(ETH_P_ARP)))==-1){
perror("socket error");
return -1;
}
for(;;){
if(recvfrom(sock,recvbuf,sizeof(recvbuf),0,NULL,NULL)==-1){
perror("recvfrom error");
}
struct ether_header *e;
e=(struct ether_header *)recvbuf;
printf("arp from :%s\n",e->ether_shost);
}
}
输出如下:
arp from :
arp from :
arp from :
arp from :
arp from :
要用 %s
打印的字符串是 个字符 的序列,以特殊的空终止符 '[=12=]'
.
e->ether_shost
中的数据是一系列的六个字节,不是字符,不是空终止的,你需要将它们一个一个地打印成小整数(通常是十六进制表示法):
printf("%02hhx:%02hhx:%02hhx:%02hhx:%02hhx:%02hhx\n",
e->ether_shost[0], e->ether_shost[1], e->ether_shost[2],
e->ether_shost[3], e->ether_shost[4], e->ether_shost[5]);
有关所用格式的说明,请参见例如this printf
reference.
我有以下简单的代码来捕获发送到我的设备的所有 arp 数据包,但它没有打印任何东西
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <arpa/inet.h>
#include <net/ethernet.h>
int main(){
int sock;
char recvbuf[2048];
if((sock=socket(PF_PACKET,SOCK_DGRAM,htons(ETH_P_ARP)))==-1){
perror("socket error");
return -1;
}
for(;;){
if(recvfrom(sock,recvbuf,sizeof(recvbuf),0,NULL,NULL)==-1){
perror("recvfrom error");
}
struct ether_header *e;
e=(struct ether_header *)recvbuf;
printf("arp from :%s\n",e->ether_shost);
}
}
输出如下:
arp from :
arp from :
arp from :
arp from :
arp from :
要用 %s
打印的字符串是 个字符 的序列,以特殊的空终止符 '[=12=]'
.
e->ether_shost
中的数据是一系列的六个字节,不是字符,不是空终止的,你需要将它们一个一个地打印成小整数(通常是十六进制表示法):
printf("%02hhx:%02hhx:%02hhx:%02hhx:%02hhx:%02hhx\n",
e->ether_shost[0], e->ether_shost[1], e->ether_shost[2],
e->ether_shost[3], e->ether_shost[4], e->ether_shost[5]);
有关所用格式的说明,请参见例如this printf
reference.