고등학교 C 언어 수행 평가 당시 간단하게 만들어 본 호스트 관리 프로그램을 소개해 보려 합니다.
기본적인 printf, scanf 등의 명령어와 if문 등 으로 만들어 보았습니다.
호스트 관리하기
[Computer Tips] - hosts 파일 활용해 특정 사이트 차단하기
hosts 파일을 수정해 호스트를 관리하는 것에 대해서는 위 글에서 자세히 다루었습니다.
이 프로그램은 hosts 파일을 직접 수정하지 않고 원하는 URL를 127.0.0.1에 대응시켜 줍니다. 이미 보다 우수한 호스트 관리 프로그램이 많기 때문에 프로그램 자체의 기능보다는 C 언어 연습 용으로 생각하시는 것이 맞을 것 같습니다.
호스트 관리자
주석을 포함한 소스 전체를 첨부합니다.
컴파일이 불가능한 환경에서 조금 손을 봤기 때문에 문법에 오류가 있을 수 있습니다. 제보해주시면 수정하겠습니다.
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <string.h>
void main (void) {
FILE *file;
char tdel1[1000][100];//127.0.0.1을 저장합니다.
char tdel2[1000][100];//hosts 파일에서 127.0.0.1에 대응되는 사이트를 저장합니다.
char tdel[100];//입력된 사이트 URL을 임시로 저장합니다.
int admin;//관리자 권한을 얻을 수 있는지에 대한 값입니다.
int order;//기능에 대한 값입니다.
int i=0;//
int num;//
int j=0;//for문에서 사용합니다.
printf("호스트 관리자\n이 프로그램은 시스템 파일을 수정해야 하기 때문에 관리자 권한이 필요합니다.\n");
printf("일반적으로 윈도우 비스타 이상의 운영체제에서는 마우스 우측 클릭 후 관리자 권한으로 실행해 관리자 권한을 얻을 수 있습니다.\n");
printf("관리자 권한을 얻을 수 없는 경우에는 매번 hosts 파일을 다시 작성해야 합니다.\n");
printf("1. 관리자 권한을 얻을 수 있다.\n2. 관리자 권한을 얻을 수 없다.\n);
//관리자 권한을 얻을 수 있는지에 따라 hosts 파일의 관리 방법이 달라집니다. 다시 한번 말씀드리지만 실용성 보다는 C 언어의 연습에 주안점을 두었습니다.
scanf("%d",&admin);
system("cls");//프롬프트 화면을 초기화합니다.
if(admin==1){//관리자 권한을 얻을 수 있는 경우입니다.
file = fopen("C:\Windows\System32\drivers\etc\hosts","a+");//hosts 파일에 접근합니다.
for(;;){//무한 반복
printf("호스트 관리자\n");
printf("0. Hosts 초기화 : 첫 실행 시에 실행\n");//hosts 파일 자체의 주석 전체를 삭제해 관리를 보다 용이하게 하기 위함입니다.
printf("1. 차단 사이트 추가\n");
printf("2. 차단 사이트 삭제\n");
printf("3. 변경 사항 저장\n");//C 언어에서 파일 수정 후에는 반드시 별도의 저장 명령이 필요합니다.
scanf("%d",&order);
if(order==0){//hosts 파일이 없는 경우에는 생성하고 hosts 파일이 있는 경우에는 전체 내용을 삭제합니다.
printf("0. Hosts 초기화 : 첫 실행 시에만 실행\n");
fclose(file);
system("del C:\Windows\System32\drivers\etc\hosts");
file=freopen("C:\Windows\System32\drivers\etc\hosts","w",file);//전체 내용을 삭제합니다.
Sleep(1000);
}
else if(order==1){
freopen("C:\Windows\System32\drivers\etc\hosts","a+",file);
printf("1. 차단 사이트 추가\n");
printf("차단 할 사이트를 입력하세요.\nEx)www.naver.com\n");
scanf("%s",tdel);
fprintf(file,"127.0.0.1 %s\n",tdel);
Sleep(1000);//딜레이를 줍니다.
}
else if(order==2){
printf("2. 차단 사이트 삭제\n");
freopen("C:\Windows\System32\drivers\etc\hosts","r",file);
i=0;
tdel1[0][0]='\0';
tdel2[0][0]='\0';
1
while(!feof(file)){
fscanf(file,"%s %s ",tdel1[i],tdel2[i]);
tdel1[i+1][0]='\0';
tdel2[i+1][0]='\0';
printf("%s %s\n",tdel1[i],tdel2[i]);
i++;
}//hosts 파일에 저장된 사이트를 출력합니다.
printf("삭제 할 사이트를 선택하세요.\n");
scanf("%d",&num);
for(;num<i+1;num++){/
strcpy(tdel1[num-1],tdel1[num]);
strcpy(tdel2[num-1],tdel2[num]);
}
freopen("C:\Windows\System32\drivers\etc\hosts","w",file);
for(j=0;j<i;j++){
fprintf(file,"%s %s\n",tdel1[j],tdel2[j]);
}
Sleep(1000);
}
else if(order==3) break;
system("cls");
}
fclose(file);
}
if(admin==2){//관리자 권한을 얻을 수 없는 경우입니다.
file=fopen("hosts","w",file);
Sleep(1000);
for(;;){//무한 반복
printf("호스트 관리자\n");
printf("1. 차단 사이트 추가\n");
printf("2. 차단 사이트 삭제\n");
printf("3. Host 파일 만들기\n");
scanf("%d",&order);
if(order==1){
freopen("hosts","a+",file);
printf("1. 차단 사이트 추가\n");
printf("차단 할 사이트를 입력하세요.\nEx)www.naver.com\n");
scanf("%s",tdel);
fprintf(file,"127.0.0.1 %s\n",tdel);
Sleep(1000);
}
else if(order==2){
printf("2. 차단 사이트 삭제\n");
freopen("hosts","r",file);
i=0;
tdel1[0][0]='\0';
tdel2[0][0]='\0';
//
while(!feof(file)){
fscanf(file,"%s %s ",tdel1[i],tdel2[i]);
tdel1[i+1][0]='\0';
tdel2[i+1][0]='\0';
printf("%s %s\n",tdel1[i],tdel2[i]);
i++;
}
printf("삭제 할 사이트를 선택하세요.\n");
scanf("%d",&num);
for(;num<i+1;num++){/
strcpy(tdel1[num-1],tdel1[num]);
strcpy(tdel2[num-1],tdel2[num]);
}
freopen("hosts","w",file);
for(j=0;j<i;j++){
fprintf(file,"%s %s\n",tdel1[j],tdel2[j]);
}
Sleep(1000);
}
else if(order==3) break;
system("cls");
}
fclose(file);
system("cls");
printf("이제 같은 폴더 내의 hosts 파일을 C:\WINDOWS\system32\drivers\etc 에 복사하시면 됩니다.\n");
}
}