-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathheaderParser.c
More file actions
126 lines (121 loc) · 4.96 KB
/
headerParser.c
File metadata and controls
126 lines (121 loc) · 4.96 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
#include "headerParser.h"
const char* MAC_HEADER_TYPE[] = {"Management", "Control", "Data", "Reserved"};
const char* MAC_HEADER_SUBTYPE_MANAGEMENT[] = {"Association Request", "", "", "", "Probe Request",
"", "", "", "Beacon", "", "Disassociation",
"Authentication", "Deauthentication", "", "", ""};
void printRadiotapHeader(struct ieee80211_radiotap_header* hdr, winStruct* wins) {
wprintw(wins->arp_right->win, "Radiotap header\nVersion\t%d\nLength\t%d\n",
hdr->it_version, hdr->it_len);
if(hdr->it_present)
wprintw(wins->arp_right->win, "FLAGS: %hhx\n");
uint8_t flags_counter = 0;
if(hdr->it_present & TSFT)
{
uint64_t val = *((uint64_t*)hdr+sizeof(struct ieee80211_radiotap_header) + flags_counter);
wprintw(wins->arp_right->win, "\tTSFT\t%d ms\n", val);
flags_counter += sizeof(uint64_t);
}
if(hdr->it_present & FLAGS)
{
uint8_t val = *((uint8_t*)hdr+sizeof(struct ieee80211_radiotap_header) + flags_counter);
wprintw(wins->arp_right->win, "\tFLAGS\t%hhx\n", val);
flags_counter += sizeof(uint8_t);
}
if(hdr->it_present & RATE)
{
uint8_t val = *((uint8_t*)hdr+sizeof(struct ieee80211_radiotap_header) + flags_counter);
wprintw(wins->arp_right->win, "\tRATE\t%d Kbps\n", val*500);
flags_counter += sizeof(uint8_t);
}
if(hdr->it_present & CHANNEL)
{
uint16_t val = *((uint16_t*)hdr+sizeof(struct ieee80211_radiotap_header) + flags_counter);
flags_counter += sizeof(uint16_t);
uint16_t flags= *((uint16_t*)hdr+sizeof(struct ieee80211_radiotap_header) + flags_counter);
wprintw(wins->arp_right->win, "\tCHANNEL\t%d MHz, flags %hhx\n", htons(val), flags);
flags_counter += sizeof(uint16_t);
}
if(hdr->it_present & FHSS)
{
uint8_t val = *((uint8_t*)hdr+sizeof(struct ieee80211_radiotap_header) + flags_counter);
flags_counter += sizeof(uint8_t);
uint8_t flags= *((uint8_t*)hdr+sizeof(struct ieee80211_radiotap_header) + flags_counter);
wprintw(wins->arp_right->win, "\tFHSS\tval %d, flags %hhx\n", val, flags);
flags_counter += sizeof(uint8_t);
}
if(hdr->it_present & DBM_ANT_SIG)
{
int8_t val = *((uint8_t*)hdr+sizeof(struct ieee80211_radiotap_header) + flags_counter);
wprintw(wins->arp_right->win, "\tANTENNA SIGNAL \t%d dBm\n", val);
flags_counter += sizeof(uint8_t);
}
if(hdr->it_present & DBM_ANT_NOISE)
{
int8_t val = *((uint8_t*)hdr+sizeof(struct ieee80211_radiotap_header) + flags_counter);
wprintw(wins->arp_right->win, "\tANTENNA NOISE \t%d dBm\n", val);
flags_counter += sizeof(uint8_t);
}
if(hdr->it_present & LOCK_QUALITY)
{
uint16_t val = *((uint16_t*)hdr+sizeof(struct ieee80211_radiotap_header) + flags_counter);
wprintw(wins->arp_right->win, "\tLOCK QUALITY\t%d\n", htons(val));
flags_counter += sizeof(uint16_t);
}
if(hdr->it_present & TX_ATT)
{
uint16_t val = *((uint16_t*)hdr+sizeof(struct ieee80211_radiotap_header) + flags_counter);
wprintw(wins->arp_right->win, "\tTX ATTENUATION\t%d\n", htons(val));
flags_counter += sizeof(uint16_t);
}
wprintw(wins->arp_right->win, "\n");
update_panels();
doupdate();
}
void printMACHeader(struct machdr* hdr, winStruct* wins){
wprintw(wins->arp_right->win, "MAC header\n\tVERSION\t%d\n", hdr->version);
wprintw(wins->arp_right->win, "\tTYPE\t%s\n", MAC_HEADER_TYPE[hdr->type]);
wprintw(wins->arp_right->win, "TYPE %hhx",hdr->type);
update_panels();
doupdate();
switch(hdr->type)
{
case TYPE_MANAGEMENT:
wprintw(wins->arp_right->win, "\tSUBTYPE\t%s\n",MAC_HEADER_SUBTYPE_MANAGEMENT[hdr->subtype]);
break;
default:
wprintw(wins->arp_right->win, "\tSUBTYPE\tNot implemented\n");
}
wprintw(wins->arp_right->win, "\tReceiver\t");
for(int i = 0; i <6; i++)
{
wprintw(wins->arp_right->win, "%x:", hdr->dmac[i]);
}
wprintw(wins->arp_right->win, "\n");
wprintw(wins->arp_right->win, "\tDestination\t");
for(int i = 0; i <6; i++)
{
wprintw(wins->arp_right->win, "%x:", hdr->smac[i]);
}
wprintw(wins->arp_right->win, "\n");
wprintw(wins->arp_right->win, "\tBSSID\t\t");
for(int i = 0; i <6; i++)
{
wprintw(wins->arp_right->win, "%x:", hdr->bssid[i]);
}
wprintw(wins->arp_right->win, "\n");
if(hdr->type == TYPE_MANAGEMENT && hdr->subtype == SUB_BEACON)
{
struct beacon_frame* beac = hdr+sizeof(struct machdr);
wprintw(wins->arp_right->win, "Timestamp\t%d",htons(beac->timestamp));
wprintw(wins->arp_right->win, "Beacon Interval\t%d",htons(beac->interval));
wprintw(wins->arp_right->win, "Capability\t%d",htons(beac->capability));
wprintw(wins->arp_right->win, "SSID ID\t%d",beac->ssid_id);
wprintw(wins->arp_right->win, "SSID Len\t%d",beac->ssid_len);
char* ssid_name = calloc(sizeof(char), beac->ssid_len+1);
memcpy(ssid_name, beac+sizeof(struct beacon_frame), beac->ssid_len);
wprintw(wins->arp_right->win, "SSID\t%d",ssid_name);
}
wprintw(wins->arp_right->win, "\n");
update_panels();
doupdate();
}