使用笔记本创建一个局域网,相当于使笔记本的无线网卡具备了路由器的功能,同时不影响无线网卡原有的功能,就好像有两块无线网卡一样。这个小工具本质上是使用windows的命令netsh创建或关闭局域网,但是使用C语言对其进行了封装,并且具有读写配置文件的功能,使用更加方便。
主要涉及到的知识:
1、cmd命令:netsh,echo;
2、系统调用函数 int system(const char*);
3、C语言文件操作。
注:曾在多台笔记本上试过都没有问题,包括一台使用低端“螃蟹卡”的低端上网本,也没有问题。但是由于本人对Windows下创建局域网的底层原理没有研究,因此不能保证每台笔记本都适用。需要以管理员身份运行(但win10貌似不需要)。
下面是源程序(如果要使连接到该wifi的设备可以上网,需要进一步设置,见后面的图解):
#include <stdio.h>
#include <stdlib.h>
#define N 256
void init_str(char* str){ //字符串初始化空
int i;
for(i=0;i<sizeof(str);i++){
if(str[i]=='\0'){
break;
}
str[i]='\0';
}
}
char wifi_name[N]={'\0'}; //要创建的wifi名称
char wifi_passwd[32]={'\0'}; //wifi密码
char cmd_set[2*N]={'\0'}; //要执行的打开wifi的命令行
char choose='0'; //选择打开还是关闭
char *cmd_set1="netsh wlan set hostednetwork mode=allow ssid="; //打开wifi第一行
char *cmd_set2=" key="; //第二行
char *cmd_start="netsh wlan start hostednetwork"; //第三行
char *cmd_stop="netsh wlan stop hostednetwork"; //关闭wifi
FILE *fp;
char line[N]={'\0'};
short line_num=0;
short i;
while(1){
printf("选择(输入数字):<0>退出程序 <1>打开wifi <2>关闭wifi:");
scanf("%s",&choose);
if(choose=='1'){ //打开wifi
if((fp=fopen("wifi_info.txt","rt"))==NULL){ //wifi_info.txt不存在
printf("wifi name:");
scanf("%s",&wifi_name);
sprintf(line,"%s%s%s","echo ",wifi_name,">wifi_info.txt"); //创建wifi_info.txt并写入wifi名称
system(line);
printf("wifi passwd:");
scanf("%s",&wifi_passwd);
sprintf(line,"%s%s%s","echo ",wifi_passwd,">>wifi_info.txt"); //写入wifi密码
system(line);
sprintf(cmd_set,"%s%s%s%s",cmd_set1,wifi_name,cmd_set2,wifi_passwd);
}else if(choose=='2'){
rewind(fp);
while(fgets(line,N,fp)!=NULL){
line_num++;
for(i=0;i<N;i++){
if(line[i]=='\n'){
line[i]='\0';
break;
}
}
if(line_num==1){ //wifi名称
sprintf(cmd_set,"%s%s%s",cmd_set1,line,cmd_set2);
}else if(line_num==2){ //wifi密码
sprintf(cmd_set,"%s%s",cmd_set,line);
}
}
close(fp);
}
if(system(cmd_set)!=0){ //执行错误
if(choose=='1'){
printf("Your input format error, please re-input the info.\n");
system("del wifi_info.txt"); //删除配置文件
continue;
}
else if(choose=='2'){
printf("Wifi info error, please check the wifi_info.txt or delete it.\n");
printf("Press Enter to end the app");
fflush(stdin);
getchar();
return 1;
}
}
if(system(cmd_start)!=0){ //执行错误
printf("Wifi open error, your computer may not support netsh to create wifi.\n");
printf("Press Enter to end the app");
fflush(stdin);
getchar();
return 2;
}
printf("Wifi open OK!\nPress Enter to end the app");
fflush(stdin);
getchar();
return 0;
}else if(choose=='2'){ //关闭wifi
system(cmd_stop);
printf("Wifi close OK!\nPress Enter to end the app");
fflush(stdin);
getchar();
return 0;
}else if(choose=='0'){ //退出程序
return 0;
}else{ //非法选择
printf("Invalid choice!\n");
continue;
}
}
return 3;
}
以下为生成的应用程序执行过程:
1. 打开wifi。
首次执行程序时会要求输入wifi名称和密码。
输入wifi名称和密码后,会在应用程序当前目录下生成wifi_info.txt,以后再执行该程序时将直接从wifi_info.txt读取信息,无需再次输入。
创建成功后将在 控制面板 的 网络连接 中出现所创建的wifi。
如果输入信息错误则提示重新输入
2. 使连接到该wifi的设备可以连接互联网。
上面创建的wifi还不能连接到互联网,需要能够连接互联网的那个网络“分享给它”。比如我连接的wifi lab310可以联网,则要设置这个网络共享给所创建的wifi。如果你的以太网可以联网,则要设置以太网的共享属性。
3. 关闭wifi。