고등학교 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");


}


}

신고

+ Recent posts