標籤

BAT (38) shell (34) Virtual Machine (33) Xubuntu (29) acfs (25) PHP (24) CentOS (21) Virtul Box (20) 編輯器 (17) 資料庫 (15) lubuntu (13) windows (13) CPP (12) ubuntu (12) chrome (11) laravel (10) Docker (9) Python (9) 5A88 (7) VMware (6) 資料結構 (6) Javascript (5) Node (5) Proxmox VE (5) 公告系統 (5) 程式積木 (5) Android Studio (4) ANN (3) OB2D2016x64 (3) Xoops (3) clonezilla (3) samba (3) 公文 (3) 其他 (3) 硬體 (3) API (2) Android (2) AppInvent2 (2) Html (2) Hyper-V (2) Nas (2) botnet (2) mbot (2) swift (2) wordpress (2) 樣板 (2) 防火牆 (2) AD的應用 (1) Ansible (1) Arduino (1) CSS (1) GitLab (1) HA Proxy (1) LegoEV3 (1) PowerShell (1) Scratch (1) VM (1) XenServer (1) kotlin (1) linuxmint (1) lxc (1)

2020年5月14日 星期四

只要會打字,快速設定電腦教室的電腦為固定ip或dhcp

一間電腦教室大約35+1台電腦需要設定固定IP,希望能夠用C++讀取設定檔後,自動產生BAT來設定。而不要一部部電腦手動設定IP、DNS的IP。

使用方法:
1.檔案下載
2.下載後解壓縮,解壓密碼demo1234
3.變更資料夾內的config.txt


4.點選資料夾內的Fixed_IP_Generator.exe(注意:要以系統管理員身分執行)
5.產生 (固定IP起始到固定IP結束的範圍)數目的BAT
6.將BAT檔放置在電腦(要設定固定IP的)
7.對BAT點兩下(注意:要以系統管理員身分執行),即完成設定
 



以下是程式說明:
固定IP語法:
netsh interface ip set address "區域連線" static 固定IP 子網路遮罩 閘道
設定兩個DNS的IP
netsh interface ip set dns "區域連線" static 第一個DNS的IP
netsh interface ip add dns "區域連線" 第二個DNS的IP

例子:
固定IP:192.168.25.200
子網路遮罩:255.255.255.0
閘道IP:192.168.25.2
第一個DNS的IP:8.8.8.8
第二個DNS的IP:168.95.1.1

檔名:StaticIP.bat
內容:
netsh interface ip set address "區域連線" static 192.168.25.200 255.255.255.0 192.168.25.2
netsh interface ip set dns "區域連線" static 8.8.8.8
netsh interface ip add dns "區域連線" 168.95.1.1

設定自動取得IP(即DHCP)
netsh interface ip set address "區域連線" dhcp
設定自動取得DNS的IP(即DHCP)
netsh interface ip set dns "區域連線" dhcp

檔名:DhcpIP.bat
內容:
netsh interface ip set address "區域連線" dhcp
netsh interface ip set dns "區域連線" dhcp

接下來,我們要利用上述BAT的內容,寫入C++程式,由程式去讀取config.txt,然後產生我們要的BAT檔案。

檔名:Fixed_IP_Generator.cpp
內容:

#include <iostream>
#include <fstream>
#define MAX_FILENAME 100
#include <stdio.h>
#include <stdlib.h>
using namespace std;

main() {

/*讀取設定檔的變數*/
    char SNMmark[MAX_FILENAME];
int SNM[4];
char GWmark[MAX_FILENAME];
int GW[4];
char DR01mark[MAX_FILENAME];
int DR01[4];
char DR02mark[MAX_FILENAME];
int DR02[4];
char DNS01mark[MAX_FILENAME];
int DNS01[4];
char DNS02mark[MAX_FILENAME];
int DNS02[4];
/*讀取設定檔config.txt,並將設定寫入變數*/
    ifstream fin("config.txt");
    if(!fin) {
        cout << "無法讀入檔案\n";
        return 1;
    }
/*讀取後,將設定寫入變數並呈現在螢幕上以供檢查*/   
    while(!fin.eof()) {
fin >> SNMmark;
fin >> SNM[0] >> SNM[1] >> SNM[2] >> SNM[3];     
        fin >> GWmark;
fin >> GW[0] >> GW[1] >> GW[2]>> GW[3];
        fin >> DR01mark;
fin >> DR01[0] >> DR01[1] >> DR01[2]>> DR01[3];
        fin >> DR02mark;
fin >> DR02[0] >> DR02[1] >> DR02[2] >> DR02[3];
        fin >> DNS01mark;
fin >> DNS01[0] >> DNS01[1] >> DNS01[2]>> DNS01[3];
        fin >> DNS02mark;
fin >> DNS02[0] >> DNS02[1] >> DNS02[2] >> DNS02[3];
}
    fin.close();

/*依設定檔固定IP範圍輸出檔名*/
    char chFileName[MAX_FILENAME];
    FILE * fp;
    char ipmark[MAX_FILENAME];
    int ip[4];
    ip[0]=DR01[0];
    ip[1]=DR01[1];
    ip[2]=DR01[2];
    for ( ip[3]=DR01[3] ; ip[3]<=DR02[3] ; ip[3]++) {
   
    sprintf(chFileName, "ip_%d_%d_%d_%d.bat",ip[0],ip[1],ip[2],ip[3]);
    fp = fopen(chFileName, "w");
    fprintf(fp, "netsh interface ip set address \"區域連線\" static %d.%d.%d.%d %d.%d.%d.%d %d.%d.%d.%d\n",ip[0],ip[1],ip[2],ip[3],SNM[0],SNM[1],SNM[2],SNM[3],GW[0],GW[1],GW[2],GW[3]);   
    fprintf(fp, "netsh interface ip set dns \"區域連線\" static %d.%d.%d.%d\n",DNS01[0],DNS01[1],DNS01[2],DNS01[3]);
    fprintf(fp, "netsh interface ip add dns \"區域連線\" %d.%d.%d.%d\n",DNS02[0],DNS02[1],DNS02[2],DNS02[3]);
fclose(fp);
}
    return 0;
}

資料來源:
1.使用批次檔快速設定網路介面卡 IP
2.格式化檔案 I/O
3.怎樣指定開檔的檔案名稱
4.sprintf() - C語言庫函數

沒有留言:

張貼留言

在 Windows 10 x64 1909版,使用BAT快速安裝公文系統與人事服務網(自然人憑證)版

相關內容移往 https://skjhcreator.blogspot.com/2021/02/windows-10-x64-1909bat.html