packet_arp.c
来自「Java抓包必备」· C语言 代码 · 共 52 行
C
52 行
#include<jni.h>#ifndef WIN32#include<sys/param.h>#define __FAVOR_BSD#include<netinet/in.h>#include<sys/socket.h>#else#include<winsock.h>#endif#include<net/if.h>#include<netinet/if_ether.h>#include"Jpcap_sub.h"/** analyze arp header **/int analyze_arp(jobject packet,u_char *data){ struct ether_arp *arp=(struct ether_arp *)data; jbyteArray sha,spa,tha,tpa; u_char hl,pl;#ifdef DEBUG puts ("analyze arp");#endif hl=arp->arp_hln; pl=arp->arp_pln;
sha=(*jni_env)->NewByteArray(jni_env,hl); (*jni_env)->SetByteArrayRegion(jni_env,sha,0,hl,(char *)(data+sizeof(struct arphdr))); spa=(*jni_env)->NewByteArray(jni_env,pl); (*jni_env)->SetByteArrayRegion(jni_env,spa,0,pl,(char *)(data+sizeof(struct arphdr)+hl)); tha=(*jni_env)->NewByteArray(jni_env,hl); (*jni_env)->SetByteArrayRegion(jni_env,tha,0,hl,(char *)(data+sizeof(struct arphdr)+hl+pl)); tpa=(*jni_env)->NewByteArray(jni_env,pl); (*jni_env)->SetByteArrayRegion(jni_env,tpa,0,pl,(char *)(data+sizeof(struct arphdr)+hl+pl+hl)); (*jni_env)->CallVoidMethod(jni_env,packet,setARPValueMID, (jshort)ntohs(arp->arp_hrd), (jshort)ntohs(arp->arp_pro), (jshort)hl,(jshort)pl, (jshort)ntohs(arp->arp_op), sha,spa,tha,tpa); DeleteLocalRef(sha); DeleteLocalRef(spa); DeleteLocalRef(tha); DeleteLocalRef(tpa); return sizeof(struct arphdr)+hl*2+pl*2;}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?