linux c 网络编程 arp,linux网络编程之:接受网络中的ARP数据并分析(附C语言实现)...

#include

#include

#include

#include

#define ARP_REQUEST 1

typedef struct aprhdr{

u_int16_t htype;//Hardware type

u_int16_t ptype;//protocol type

u_char hlen;//Hardware address length

u_char plen;//protocol address length

u_int16_t oper;//operation code

u_char sha[6];//sender hardware address

u_char spa[4];//sender ip address

u_char tha[6];//target hardware address

u_char tpa[4];//target ip address

}arphdr_t;

#define MAX 2048

int main(void){

int i = 0;

bpf_u_int32 net = 0, mast = 0;

struct bpf_program filter;

char errbuf[PCAP_ERRBUF_SIZE];

pcap_t *des = NULL;

struct pcap_pkthdr hk;

const unsigned char *packet = NULL;

arphdr_t *arp = NULL;

memset(errbuf, 0, PCAP_ERRBUF_SIZE);

des = pcap_open_live("eth0", MAX, 0, 512, errbuf);

pcap_lookupnet("eth0", &net, &mast, errbuf);

pcap_compile(des, &filter, "arp", 1, 0);

pcap_setfilter(des, &filter);

while(1){

packet = pcap_next(des, &hk);

arp = (struct arphdr*)(packet + 14);

if(arp != NULL){

printf("\nRecived packet size:\t%d\n", hk.len);

printf("Hardware type:\t%s\n", (ntohs(arp->htype) == 1) ? "Ethernet" : "Unknown");

printf("Protocol type:\t%s\n", (ntohs(arp->ptype) == 0x0800) ? "IPv4" : "Unknown");

printf("Operation:\t%s\n", (ntohs(arp->oper) == ARP_REQUEST) ? "ARP Request" : "ARP Reply");

if(ntohs(arp->htype) == 1 && ntohs(arp->ptype) == 0x0800){

printf("Sender MAC:\t");

for(; i < 6; i++){

printf("%02X:", arp->sha[i]);

}

printf("\nSender IP:\t");

for(i = 0; i < 4; i++){

printf("%d.", arp->spa[i]);

}

printf("\nTarget MAC\t");

for(i = 0; i < 6; i++){

printf("%02X:", arp->tha[i]);

}

printf("\nTarget IP:\t");

for(i = 0; i < 4; i++){

printf("%d.", arp->tpa[i]);

}

}

}

}

return 0;

}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值