Windows下使用C语言创建无线局域网

    使用笔记本创建一个局域网,相当于使笔记本的无线网卡具备了路由器的功能,同时不影响无线网卡原有的功能,就好像有两块无线网卡一样。这个小工具本质上是使用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';
    }
}

int main(){
    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。




  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值