⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 psp开发用的所有头文件。包含所有系统API。需要psp-gcc编译器。在www.psp-dev.com上有
💻 C
字号:
/* * PSP Software Development Kit - http://www.pspdev.org * ----------------------------------------------------------------------- * Licensed under the BSD license, see LICENSE in PSPSDK root for details. * * main.c - ELF Based WLAN Scanner * * Copyright (c) 2005 James F <tyranid@gmail.com> *                    adresd * * $Id: main.c 1888 2006-05-01 08:47:04Z tyranid $ * $HeadURL$ */#include <pspkernel.h>#include <pspdebug.h>#include <pspsdk.h>#include <stdlib.h>#include <string.h>#include <unistd.h>#include <pspnet.h>#include <pspwlan.h>#include <pspctrl.h>#include <pspdisplay.h>#define printf pspDebugScreenPrintf#define MODULE_NAME "WlanScanner"PSP_MODULE_INFO(MODULE_NAME, 0x1000, 1, 1);PSP_MAIN_THREAD_ATTR(0);/* Init the scan */int sceNet_lib_5216CBF5(const char *name);/* Do the scan */int sceNet_lib_7BA3ED91(const char *name, void *type, u32 *size, void *buf, u32 *unk);/* Terminate the scan */int sceNet_lib_D2422E4D(const char *name);#define InitScan sceNet_lib_5216CBF5#define ScanAPs  sceNet_lib_7BA3ED91#define TermScan sceNet_lib_D2422E4D/* Global buffer to store the scan data */unsigned char scan_data[0xA80];/* Returned data */struct ScanData{	struct ScanHead *pNext; 	unsigned char bssid[6]; 	char channel; 	unsigned char namesize; 	char name[32]; 	unsigned int bsstype; 	unsigned int beaconperiod; 	unsigned int dtimperiod; 	unsigned int timestamp; 	unsigned int localtime; 	unsigned short atim; 	unsigned short capabilities; 	unsigned char  rate[8]; 	unsigned short rssi; 	unsigned char  sizepad[6]; } __attribute__((packed));/* Capability flags */const char *caps[8] = {	"ESS, ",	"IBSS, ",	"CF Pollable, ",	"CF Pollreq,  ",	"Privacy (WEP), ",	"Short Preamble, ",	"PBCC, ",	"Channel Agility, "};/* Print the scan summary data to stdout */void print_apsum(struct ScanData *pData){	char name[33];	int  loop;	strncpy(name, pData->name, 32);	name[32] = 0;	printf("RSSI:%02d  ", pData->rssi);	if (pData->capabilities & (1 << 4))		printf(" WEP! ");	else		printf("NO WEP");	printf("   SSID: %s\n", name);}/* Print the scan data to stdout */void print_ap(struct ScanData *pData){	char name[33];	char bssid[30];	int  loop;	strncpy(name, pData->name, 32);	name[32] = 0;	sceNetEtherNtostr(pData->bssid, bssid);	printf("BSSID: %s\n", bssid);	printf("SSID: %s\n", name);	printf("bsstype: ");	if(pData->bsstype == 1)	{		printf("Infrastructure\n");	}	else if(pData->bsstype == 2)	{		printf("Independent\n");	}	else	{		printf("Unknown\n");	}	printf("Beacon Period: %d\n", pData->beaconperiod);	printf("DTIM period: %d\n", pData->dtimperiod);	printf("Timestamp: %d\n", pData->timestamp);	printf("Local Time: %d\n", pData->localtime);	printf("Channel: %d\n", pData->channel);	printf("ATIM: %d\n", pData->atim);	printf("Capability Information: ");	for(loop = 0; loop < 8; loop++)	{		if(pData->capabilities & (1 << loop))		{			printf("%s", caps[loop]);		}	}	printf("\n");	printf("Rate: ");	for(loop = 0; loop < 8; loop++)	{		const char *type;		if(pData->rate[loop] & 0x80)		{			type = "Basic";		}		else		{			type = "Operational";		}		if(pData->rate[loop] & 0x7F)		{			printf("%s %d kbps, ", type, (pData->rate[loop] & 0x7F) * 500);		}	}	printf("\n");	printf("RSSI: %d\n", pData->rssi);	printf("\n");}/* Do a scan */struct ScanData *do_scan(int *count){	unsigned char type[0x4C];	u32 size, unk;	int i;	int ret;	if((ret = InitScan("wlan")) >= 0)	{		memset(type, 0, sizeof(type));		/* Set the channels we want to scan */		for(i = 1; i < 0xF; i++)		{			type[0x9+i] = i;		}		type[0x3C] = 1;		*((u32*) (type + 0x44)) = 1;    //6/* Minimum strength */		*((u32*) (type + 0x48)) = 100;  /* Maximum strength */		size = sizeof(scan_data);		unk  = 0;		memset(scan_data, 0, sizeof(scan_data));		ret = ScanAPs("wlan", type, &size, scan_data, &unk);		if(ret < 0)		{			printf("Error, could not perform scan err = %08X\n", ret);		}		else		{			*count = size / sizeof(struct ScanData);			return (struct ScanData *) scan_data;		}	}	else	{		printf("Error, cannot initialise scan %08X\n", ret);	}	TermScan("wlan");	return NULL;}/* Exit callback */int exit_callback(int arg1, int arg2, void *common){	sceWlanDevDetach();	sceNetTerm();	sceKernelExitGame();	return 0;}/* Callback thread */int CallbackThread(SceSize args, void *argp){	int cbid;	cbid = sceKernelCreateCallback("Exit Callback", exit_callback, NULL);	sceKernelRegisterExitCallback(cbid);	sceKernelSleepThreadCB();	return 0;}/* Sets up the callback thread and returns its thread id */int SetupCallbacks(void){	int thid = 0;	thid = sceKernelCreateThread("update_thread", CallbackThread,				     0x11, 0xFA0, PSP_THREAD_ATTR_USER, 0);	if(thid >= 0)	{		sceKernelStartThread(thid, 0, 0);	}	return thid;}void start_ui(struct ScanData *pScan, int count){	unsigned int last = 0;	SceCtrlData pad;	int ap = 0;	int loop = 1;	int vcount = 0;	sceCtrlSetSamplingCycle(0);	sceCtrlSetSamplingMode(PSP_CTRL_MODE_ANALOG);	while(loop)	{		pspDebugScreenClear();		printf("Scan found %d access point(s)\n\n", count);		printf("Press X to rescan, SQUARE to quit\n");		if (count == 0) printf("\nAuto re-scan in 30 seconds\n");		else 			printf("Press O to view/cycle through the access points\n\n");				if (ap == 0)		{			int x;			for (x=0;x<count;x++)			{				print_apsum(&pScan[x]);			}		}		else		{			printf("\nDisplaying access point %d:\n\n", ap);			print_ap(&pScan[ap-1]);		}				while(loop)		{			unsigned int mask;				sceCtrlReadBufferPositive(&pad, 1);			mask = pad.Buttons & ~last;			last = pad.Buttons;			if(mask & PSP_CTRL_CIRCLE)			{				ap = (ap + 1) % (count+1);				break;			}			if(mask & PSP_CTRL_CROSS) loop = 0;			if(mask & PSP_CTRL_SQUARE) sceKernelExitGame();			sceDisplayWaitVblankStart();			if (count == 0)			{				if ((vcount % 60) == 0) printf(".");				vcount++;				if (vcount > (30*60)) loop = 0; // auto-rescan			}		}	}}int net_thread(SceSize args, void *argp){	int ret;	struct ScanData *pScan = NULL;	int count;	printf("Please wait, performing WLAN AP scan...\n");	ret = sceNetInit(0x20000, 0x20, 0x1000, 0x20, 0x1000);	if(ret < 0)	{		printf("Error initialising network lib %08X\n", ret);		goto error;	}	ret = -1;	while(ret < 0)	{		ret = sceWlanDevAttach();		/* If returns a error which indicates it isn't ready */		if(ret == 0x80410D0E)		{			sceKernelDelayThread(1000000);		}		else if(ret < 0)		{			printf("Error attaching to wlan device %08X\n", ret);			goto error;		}	}	pScan = do_scan(&count);	while (pScan != NULL)	{		start_ui(pScan, count);		printf("\n\nPlease wait, performing WLAN AP scan...\n");		pScan = do_scan(&count);	}error:	sceWlanDevDetach();	sceNetTerm();	return 0;}/* Simple thread */int main(int argc, char **argv){	SceUID thid;	SetupCallbacks();	pspDebugScreenInit();	if(pspSdkLoadInetModules() < 0)	{		printf("Error, could not load inet modules\n");		sceKernelSleepThread();	}	/* Create a user thread to do the real work */	thid = sceKernelCreateThread("net_thread", net_thread, 0x18, 0x10000, PSP_THREAD_ATTR_USER, NULL);	if(thid < 0)	{		printf("Error, could not create thread\n");		sceKernelSleepThread();	}	sceKernelStartThread(thid, 0, NULL);	sceKernelExitDeleteThread(0);	return 0;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -