-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathStumbler.m
More file actions
executable file
·73 lines (68 loc) · 2.38 KB
/
Copy pathStumbler.m
File metadata and controls
executable file
·73 lines (68 loc) · 2.38 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
//
// Stumbler.m
// WifiCap
//
// Created by Junfeng Shen on 20/2/12.
// Copyright (c) 2012 SYSU. All rights reserved.
//
#import "Stumbler.h"
@implementation Stumbler
- (id)init{
self = [super init];
libHandle = dlopen("/System/Library/SystemConfiguration/IPConfiguration.bundle/IPConfiguration", RTLD_LAZY);
char *error;
if (libHandle == NULL && (error = dlerror()) != NULL){
NSLog(@"%s", error);
exit(1);
}
apple80211Open = dlsym(libHandle, "Apple80211Open");
apple80211Bind = dlsym(libHandle, "Apple80211BindToInterface");
apple80211Close = dlsym(libHandle, "Apple80211Close");
apple80211Scan = dlsym(libHandle, "Apple80211Scan");
apple80211Open(&airportHandle);
apple80211Bind(airportHandle, @"en0");
return self;
}
- (void)dealloc{
apple80211Close(airportHandle);
[super dealloc];
}
- (BOOL)scanNetwork:(sampleInfo*)result{
NSArray *scan_networks;
NSLog(@"scanning wifi channels");
NSDictionary *parameters = [[NSDictionary alloc] init];
apple80211Scan(airportHandle, &scan_networks, parameters);
if(scan_networks == nil)
return NO;
for(int i=0; i<scan_networks.count; i++){
NSDictionary *dic = [scan_networks objectAtIndex:i];
NSNumber *age = [dic objectForKey:@"AGE"];
if(age.integerValue < 800){
signalInfo* sig = [[signalInfo alloc] init];
sig.mac = [dic objectForKey:@"BSSID"];
sig.ssid = [dic objectForKey:@"SSID_STR"];
if(sig.ssid.length == 0)
sig.ssid = [NSString stringWithFormat:@"NULL"];
NSNumber* channel = [dic objectForKey:@"CHANNEL"];
sig.channel = channel.integerValue;
NSNumber* noise = [dic objectForKey:@"NOISE"];
sig.noise = noise.integerValue;
NSNumber* rssi = [dic objectForKey:@"RSSI"];
sig.rssi = rssi.integerValue;
NSNumber* capabilities = [dic objectForKey:@"CAPABILITIES"];
sig.capabilities = capabilities.integerValue;
NSNumber *mode = [dic objectForKey:@"AP_MODE"];
sig.mode = mode.integerValue;
NSNumber *beacon = [dic objectForKey:@"BEACON_INT"];
sig.beacon = beacon.integerValue;
[result.signals addObject:sig];
[sig release];
NSLog(@"--%d, age=%@, MAC=%@, SSID=%@, Rssi=%d, ,Channel=%d, Noise=%d, Capabilities=%d, Mode=%d, Beacon=%d--", i, age,sig.mac, sig.ssid, sig.rssi, sig.channel, sig.noise, sig.capabilities, sig.mode, sig.beacon);
}
}
result.signalCount = result.signals.count;
[parameters release];
NSLog(@"finish scanning");
return YES;
}
@end