const u_char *package) {
/* local variables */
- char tmp_buf[20],crypted_snap[12],tmp_buf1[10],tmp_buf2[32];
+ char tmp_buf[20],tmp_buf1[10],tmp_buf2[32];
+ unsigned char crypted_snap[12];
struct linux_wlan_ng_prism_hdr *prism_hdr;
struct ieee802_11_hdr *w_hdr;
struct snaphdr *snap_hdr;
struct beacon_struct *beacon_hdr;
struct ethhdr *e_hdr;
- struct iphdr *ip_hdr;
struct info_struct *my_info_struct;
int i,p_o,w_o,e_o,i_o;
if((strncmp(my_info_struct->dev,"eth",3)==0) |
((w_hdr->frame_ctl & IEEE802_11_FTYPE_DATA)==IEEE802_11_FTYPE_DATA)) {
- if(!(w_hdr->frame_ctl & IEEE802_11_FTYPE_DATA)) {
+ if((strncmp(my_info_struct->dev,"eth",3)==0)) {
printf("ethernet: (%d bytes)\n",e_o);
e_hdr=(struct ethhdr *)(package+p_o+w_o);
/* what types ? */
printf(" src_addr = ");
for(i=0;i<ETH_ALEN;i++) printf("%x%s",*(e_hdr->h_source+i),
((i==ETH_ALEN-1)?"\n":":"));
+ if((ntohs(e_hdr->h_proto)==ETH_P_IP))
+ parse_ip(package+p_o+w_o+e_o);
}
else {
snap_hdr=(struct snaphdr *)(package+p_o+w_o);
printf("- no encryption!\n");
if(snap_hdr->proto==ntohs(ETH_P_IP)) {
e_o=sizeof(struct snaphdr);
+ parse_ip(snap_hdr+e_o);
}
+
}
else {
printf("- crypted packet!\n");
printf("%x ",*(snap_hdr->snap+i));
crypted_snap[i]=*(snap_hdr->snap+i);
}
- /*
+ /* xor with plain
crypted_snap[4]^=0xaa;
crypted_snap[5]^=0xaa;
crypted_snap[6]^=0x03;
printf("\n");
crypted_snap[10]='\0';
crypted_snap[11]='\n';
+
if(file_fd>0) {
printf("debug: saved to file\n");
- write(file_fd,crypted_snap,11);
+ dprintf(file_fd,IVLINE,IVL_ARGS);
}
}
}
-
- /* IP ? */
- if((ntohs(e_hdr->h_proto)==ETH_P_IP) | (ntohs(snap_hdr->proto)==ETH_P_IP)) {
- printf("ip protocol: (%d bytes)\n",i_o);
- ip_hdr=(struct iphdr *)(package+p_o+w_o+e_o);
- printf("version = %x ",ntohs(ip_hdr->version));
- printf("header_length = %x \n",ntohs(ip_hdr->ihl));
- printf("service = %x ",ntohs(ip_hdr->tos));
- printf("total_length(dec.) = %d \n",ntohs(ip_hdr->tot_len));
- printf("source_ip: ");
- for(i=0;i<=3;++i) {
- printf("%d%s",
- (ip_hdr->saddr&(0xff<<(8*i)))>>(8*i),
- (i==3?"\n":"."));
- }
- printf("destination_ip: ");
- for(i=0;i<=3;++i) {
- printf("%d%s",
- (ip_hdr->daddr&(0xff<<(8*i)))>>(8*i),
- (i==3?"\n":"."));
- }
- printf("ip_id = %x ",ntohs(ip_hdr->id));
- printf("ip_offset = %x \n",ntohs(ip_hdr->frag_off));
- printf("time2live = %x ip_proto = %x\n",ntohs(ip_hdr->ttl),
- ntohs(ip_hdr->protocol));
- // printf("chksum: %x\n",ntohs(ip_hdr->ip_sum));
- }
}
- /* check what we have ... */
+ /* dump it */
+#ifdef SHOW_HEX
printf("all dump: (hex)\n");
for(i=p_o+w_o;i<pcap_header->caplen;i++)
printf("%x ",*(package+i));
printf("\n");
+#endif
#ifdef DEBUG_CHAR
printf("all dump: (char)\n");
for(i=p_o+w_o;i<pcap_header->caplen;i++)
}
return 0;
}
+
+int parse_ip(char *ip_o) {
+ struct iphdr *ip_hdr;
+ int i;
+
+ printf("ip protocol:\n");
+ ip_hdr=(struct iphdr *)ip_o;
+ printf("version = %x ",ntohs(ip_hdr->version));
+ printf("header_length = %x \n",ntohs(ip_hdr->ihl));
+ printf("service = %x ",ntohs(ip_hdr->tos));
+ printf("total_length(dec.) = %d \n",ntohs(ip_hdr->tot_len));
+ printf("source_ip: ");
+ for(i=0;i<=3;++i) {
+ printf("%d%s",
+ (ip_hdr->saddr&(0xff<<(8*i)))>>(8*i),
+ (i==3?"\n":"."));
+ }
+ printf("destination_ip: ");
+ for(i=0;i<=3;++i) {
+ printf("%d%s",
+ (ip_hdr->daddr&(0xff<<(8*i)))>>(8*i),
+ (i==3?"\n":"."));
+ }
+ printf("ip_id = %x ",ntohs(ip_hdr->id));
+ printf("ip_offset = %x \n",ntohs(ip_hdr->frag_off));
+ printf("time2live = %x ip_proto = %x\n",ntohs(ip_hdr->ttl),
+ ntohs(ip_hdr->protocol));
+ // printf("chksum: %x\n",ntohs(ip_hdr->ip_sum));
+}