We are Architect

31. 웹 사이트 차단 프로그램 본문

Programing/Python

31. 웹 사이트 차단 프로그램

the best infra 2024. 12. 5. 23:39

 

* 취지

  • 내가 원하지 않는 사이트가 인터넷 서핑 중에 갑자기 뜰 수 있다. 그러면 들어가서 잘 못 누르거나 하면 해킹의 위험도 존재하고 무엇보다 스트레스가 쌓는 것이 매우 좋지 않다. 그래서 원하지 않는 웹 사이트는 아예 뜨지 않게 하려고 만들었다. 

 

* 도구 

  • os 모듈 : 운영체제 시스템을 설정할 수 있게 하는 함수로써 파이썬 기본라이브러리에 존재한다. 해당 모듈을 사용하여 관리자 권한으로 시스템에 들어가서 로컬 PC에서 dns서버 역할을 하는 hosts파일 설정을 건드릴 것이다. 

 

* hosts 파일이란? 

  • hosts 파일은 ip와 도메인을 맵핑 시켜서 인터넷에서 주소를 찾기 위해 사용된다. DNS서버 보다 먼저 질의를 받는 곳이 hosts파일이다. 
  • 해당 프로그램에서는 파일을 수정하여 오히려 ip를 127.0.0.1 인 루프백 ip로 설정해 원하지 않는 도메인과 맵핑시켜서 뜨지 않게 응용할 것이다.

 

* 주의 할점 

  • 우선 hosts 파일에 접근하려면 관리자 권한으로 접근해야 한다. 시스템 상에 존재하는 파일이기 때문이다. vs code를 우클릭하여 관리자 권한 모드로 실행 시키자.
  • 보안 프로그램이 설치 되어있으면 파이썬이 해당 파일로 접근하는 것을 차단한다. 그래서 보안 프로그램(알약)을 거야 한다. (프로그램 테스트를 제외하고는 끄는 걸 추천하지 않는다.)

 

* 모듈 혹은 패키지

# 시스템의 설정 파일을 변경하기 위한 모듈
import os

 

 

* 함수

# block_websites함수 : website에 들어가는 값들은 redirect 해라
def block_websites(websites, redirect_ip="127.0.0.1"):
    
    # 운영체제 호스트 파일 경로
    host_file = r"C:\Windows\System32\drivers\etc\hosts" if os.name == 'nt' else "/etc/hosts"

    try:
        # 호스트 파일 읽고 해당 상태 저장.
        with open(host_file, 'r') as file:
            content = file.readline()
        
        # 차단 할 웹 사이트 추가
        with open(host_file, 'a') as file:
            for website in websites:
                entry = f"{redirect_ip} {website}\n"
                if entry not in content: 
                    file.write(entry)
                    print(f"차단됨 : {website}")
        
        print("웹사이트 차단이 완료 되었습니다.")
    
    # 권한 오류
    except PermissionError:
        print("관리자 권한으로 실행 해야 합니다.")
    
    # 에상치 못한 에러 발생
    except Exception as e:
        print(f"에러 발생: {e}")

 

 

* 차단하고자 하는 리스트

website_block_list = ["www.facebook.com", "www.coupang.com"]

 

 

 

* 함수 실행

block_websites(website_block_list)

 

 

 

* 프로그램 실행 전

자유롭게 접근 가능

 

 

 

* 프로그램 실행 후

차단이 걸린 모습

 

 

* 전체 코드 (웹 사이트 차단 프로그램)

# 시스템의 설정 파일을 변경하기 위한 모듈
import os

# block_websites함수 : website에 들어가는 값들은 redirect 해라
def block_websites(websites, redirect_ip="127.0.0.1"):
    
    # 운영체제 호스트 파일 경로
    host_file = r"C:\Windows\System32\drivers\etc\hosts" if os.name == 'nt' else "/etc/hosts"

    try:
        # 호스트 파일 읽고 해당 상태 저장.
        with open(host_file, 'r') as file:
            content = file.readline()
        
        # 차단 할 웹 사이트 추가
        with open(host_file, 'a') as file:
            for website in websites:
                entry = f"{redirect_ip} {website}\n"
                if entry not in content: 
                    file.write(entry)
                    print(f"차단됨 : {website}")
        
        print("웹사이트 차단이 완료 되었습니다.")
    
    # 권한 오류
    except PermissionError:
        print("관리자 권한으로 실행 해야 합니다.")
    
    # 에상치 못한 에러 발생
    except Exception as e:
        print(f"에러 발생: {e}")
    
website_block_list = ["zdnet.co.kr", "www.coupang.com"]

block_websites(website_block_list)

 

 

 

그러나 의도치 않게 차단을 하였으면 직접 파일을 들어 가서 수정할 수 있지만 프로그램을 사용해서 허용하게 할 수 있다.

 

 

 

* 전체 코드 (웹 사이트 허용 프로그램)

# 시스템의 설정 파일을 변경하기 위한 모듈
import os

# 웹 사이트 차단을 해제하는 함수
def reslove_website(websites):

    # 운영체제 호스트 파일 경로
    host_file = r"C:\Windows\System32\drivers\etc\hosts" if os.name == "nt" else "/etc/hosts"

    try:
        # 호스트 파일에 있는 각줄들 요소로 변환하고 리스트 안에 넣음.
        with open(host_file, 'r') as file:
            lines = file.readlines()
        
        # 차단된 웹사이트 제거
        with open(host_file, 'w') as file:
            for line in lines:

                #  website리스트 중에서 하나라도 삭제대상이 없다면 
                if not any(website in line for website in websites):
                    # 줄을 파일에 다시 작성
                    file.write(line)
                else:
                    # 대상이 있으면 다시 작성X(다시 새로 작성될때 없어짐.)
                    print(f"차단 해제됨: {line.strip()}")
        
        print("웹 사이트 차단이 해제되었습니다.")
    
    except  PermissionError:
        print("관리자의 권한이 필요합니다.")
    except Exception as e:
        print(f"에러 발생: {e}")

websites_to_unblock = ["zdnet.co.kr","www.coupang.com"]

reslove_website(websites_to_unblock)

 

 

 

다시 사이트가 허용된 모습