ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [python] flask서버에서 클라이언트의 ip주소 알아내기
    IT/python 2021. 12. 2. 10:30

    * 관련포스팅: flask서버 외부접속 허용 및 클라이언트 ip주소 알아내기

     

    flask서버를 AWS EC2에서 돌리다가 도저히 내 실력으로는 해결하지 못하는 문제가 발생하였다.

    외부에서 접근하는 클라이언트의 ip주소를 알아내서 서버에 저장되어있지 않은 ip주소로 접근 시에 홈페이지 접근을 막는 작업을 하려고 했다.

    하지만 AWS에서는 ELB (Elastic Load Balancer 였나..) 라는 녀석이 클라이언트와 서버 사이에서 중간다리(?) 역할을 해주는데 뭐 이 녀석이 무슨 기능을 하는지는 잘 모르고 관심도 없다. 

    근데 ELB를 통과하면서 클라이언트의 ip주소를 은닉하고 임의로 설정된 ELB 자신의 ip주소를 반환하는 것이 아니겠는가.

    따라서 어떠한 클라이언트가 접근을 하여도 서버에서 받을 수 있는 ip 주소는 단 하나 ELB의 ip주소였다.

     

    이것 저것 찾아본 결과 AWS에서 어떻게 어떻게 설정을 하면 클라이언트의 고유 ip주소를 받을 수 있다고 하는데 너무 복잡하고, 한글로 설명이 잘 되어있는 자료도 없어서 포기..

     

    차선택으로 로컬컴퓨터에 서버를 구동하고 외부 접속을 허용하는 방법으로 구현했다.

    flask서버를 로컬컴에서 구동하는데 필요한 작업은 다음과 같다. (윈도우 기준)

    1. 방화벽 포트를 열어준다. (나는 5000번으로 열었다)

    2. 사용하는 공유기의 설정 페이지로 들어가 포트 포워딩 작업을 해준다. (나는 iptime 공유기였다)

     

    # 필요 라이브러리

    ########################################################################################

    flask (pip install flask)

    Name: Flask
    Version: 2.0.1
    Summary: A simple framework for building complex web applications.
    Home-page: https://palletsprojects.com/p/flask
    Author: Armin Ronacher
    Author-email: armin.ronacher@active-4.com
    License: BSD-3-Clause
    Location: c:\programdata\anaconda3\envs\py37\lib\site-packages
    Requires: Jinja2, Werkzeug, itsdangerous, click
    Required-by:

    ########################################################################################

     

    # 코드

    ########################################################################################

    from flask import Flask, request
    import datetime
    
    app = Flask(__name__)
    
    
    @app.route("/")
    def hello():
        client_ip = request.environ.get('HTTP_X_REAL_IP', request.remote_addr)
        return f'Hello My Flask World! <br><br> Now: {datetime.datetime.now()} <br><br> Your IP: {client_ip}'
    
    
    app.run(host="0.0.0.0", port="5000", debug=True)

    ########################################################################################

     

    # 실행화면

    ########################################################################################

    휴대폰으로 접속해도 보인다.

    ########################################################################################

Designed by Tistory.