示例#1
0
static void
printssid(const char *tag, const u_int8_t *ie, size_t ielen, int maxlen)
{
	char ssid[2*IEEE80211_NWID_LEN+1];

	printf("%s<%.*s>", tag, copy_essid(ssid, maxlen, ie+2, ie[1]), ssid);
}
示例#2
0
static void
list_scan(prop_dictionary_t env)
{
	u_int8_t buf[64*1024 - 1];
	struct ieee80211req ireq;
	char ssid[IEEE80211_NWID_LEN+1];
	const u_int8_t *cp;
	int len, ssidmax;
	const struct ieee80211req_scan_result *sr;

	memset(&ireq, 0, sizeof(ireq));
	ireq.i_type = IEEE80211_IOC_SCAN_RESULTS;
	ireq.i_data = buf;
	ireq.i_len = sizeof(buf);
	if (direct_ioctl(env, SIOCG80211, &ireq) < 0)
		errx(EXIT_FAILURE, "unable to get scan results");
	len = ireq.i_len;
	if (len < (int)sizeof(*sr))
		return;

	ssidmax = calc_len(buf, len);

	printf("%-*.*s  %-17.17s  %4s %4s  %-7s %3s %4s\n"
		, ssidmax, ssidmax, "SSID"
		, "BSSID"
		, "CHAN"
		, "RATE"
		, "S:N"
		, "INT"
		, "CAPS"
	);
	cp = buf;
	while (len >= (int)sizeof(*sr)) {
		const uint8_t *vp;

		sr = (const struct ieee80211req_scan_result *) cp;
		vp = (const u_int8_t *)(sr+1);
		(void)copy_essid(ssid, sizeof(ssid), vp, sr->isr_ssid_len);
		printf("%-*.*s  %s  %3d  %3dM %3d:%-3d  %3d %-4.4s"
			, ssidmax, ssidmax, ssid
			, ether_ntoa((const struct ether_addr *) sr->isr_bssid)
			, ieee80211_mhz2ieee(sr->isr_freq, sr->isr_flags)
			, getmaxrate(sr->isr_rates, sr->isr_nrates)
			, sr->isr_rssi, sr->isr_noise
			, sr->isr_intval
			, getcaps(sr->isr_capinfo)
		);
		printies(vp + sr->isr_ssid_len, sr->isr_ie_len, 24);
		printf("\n");
		cp += sr->isr_len, len -= sr->isr_len;
	}
}
示例#3
0
static void
list_scan(const char *ifname)
{
	uint8_t buf[24 * 1024];
	char ssid[14];
	uint8_t *cp;
	int len;

	len = get80211priv(ifname, IEEE80211_IOCTL_SCAN_RESULTS,
		buf, sizeof(buf));
	if (len == -1)
		errx(1, "unable to get scan results");
	if (len < sizeof(struct ieee80211req_scan_result))
		return;

	printf("%-14.14s  %-17.17s  %4s %4s  %-5s %3s %4s\n",
		"SSID",
		"BSSID",
		"CHAN",
		"RATE",
		"S:N",
		"INT",
		"CAPS");
	cp = buf;
	do {
		struct ieee80211req_scan_result *sr;
		uint8_t *vp;

		sr = (struct ieee80211req_scan_result *) cp;
		vp = (u_int8_t *)(sr+1);
		printf("%-14.*s  %s  %3d  %3dM %2d:%-2d  %3d %-4.4s",
			copy_essid(ssid, sizeof(ssid), vp, sr->isr_ssid_len),
			ssid,
			ieee80211_ntoa(sr->isr_bssid),
			ieee80211_mhz2ieee(sr->isr_freq),
			getmaxrate(sr->isr_rates, sr->isr_nrates),
			(int8_t) sr->isr_rssi, sr->isr_noise,
			sr->isr_intval,
			getcaps(sr->isr_capinfo));
		printies(vp + sr->isr_ssid_len, sr->isr_ie_len, 24);
		printf("\n");
		cp += sr->isr_len, len -= sr->isr_len;
	} while (len >= sizeof(struct ieee80211req_scan_result));
}
示例#4
0
static int
calc_len(const u_int8_t *cp, int len)
{
	int maxlen = 0, curlen;
	const struct ieee80211req_scan_result *sr;
	char buf[IEEE80211_NWID_LEN];

	while (len >= (int)sizeof(*sr)) {
		sr = (const struct ieee80211req_scan_result *)cp;
		cp += sr->isr_len;
		len -= sr->isr_len;
		curlen = copy_essid(buf, sizeof(buf),
		    (const u_int8_t *)(sr + 1), sr->isr_ssid_len);
		if (curlen >= IEEE80211_NWID_LEN)
			return IEEE80211_NWID_LEN;
		if (curlen > maxlen)
			maxlen = curlen;
	}
	return maxlen;
}
示例#5
0
文件: rtn_wifi.c 项目: KHATEEBNSIT/AP
static void
list_scan(AP_IW_CHANSCAN_RESULT_T *cfg, const char *ifname)
{
	uint8_t  buf[48*1024];
	uint8_t  *cp = NULL;
	int      len = 0;
    int      count = 0;  //to count results.
    int      iTemp = 0;
    AP_IW_CHANSCAN_RESULT_ENTRY *entry;
    struct ieee80211req_scan_result *sr;
    uint8_t *vp;

	len = get80211priv(ifname, IEEE80211_IOCTL_SCAN_RESULTS,
			    buf, sizeof(buf));
    
	if (len == -1)
	{
		RTN_LOG("IOCTL error,unable to get scan results");
        return;
	}    
    
	if (len < sizeof(struct ieee80211req_scan_result))
	{
        RTN_LOG("get scan results len %d < struct", len);
        return;
	}
    
	cp = buf;
	do {
		sr = (struct ieee80211req_scan_result *) cp;
		vp = (u_int8_t *)(sr+1);

//        RTN_LOG("Get assignchan=%d, match chan=%d", cfg->assignChan, sr->isr_freq);

        if(cfg->assignChan == 0 || cfg->assignChan == sr->isr_freq)
        {                  
            entry = &cfg->scan_entry[count];        

            //set ssid
            iTemp = copy_essid((char *)entry->ssid, 32, vp, sr->isr_ssid_len);
            entry->ssid[iTemp] = '\0';

            //set bssid
            memcpy(entry->bssid, sr->isr_bssid, 6);
            
            //set chan
            entry->chan = sr->isr_freq;
                   
            //set maxrate
            entry->maxrate =  getmaxrate(sr->isr_rates, sr->isr_nrates);
            
            //set rssi
            entry->rssi = sr->isr_rssi;
            
            //set noise
            entry->noise = sr->isr_noise;

            //set intval
            entry->intval = sr->isr_intval;

            //set caps
            getcaps(sr->isr_capinfo, (char *)entry->caps);

            //set ies,max = 96/4-1=23
            getIEs(vp + sr->isr_ssid_len, sr->isr_ie_len, 23, entry->ieinfo);

            count++;

        }       
        
		cp += sr->isr_len, len -= sr->isr_len;               
	} while ((len >= sizeof(struct ieee80211req_scan_result)) && (count < AP_IW_CHANSCAN_MAX_RESULT_NUM));

    cfg->num = count;
}