Python Socket, Echo Server

가끔, 서버를 만지다 보면 난감할 때가 있다. 특히 그게 상용 서버라면… 굉장히 부담스럽다.

아무튼, 오늘 갑작스럽게 상용 서버를 건드려야 하는 순간이 왔다. 내용은 방화벽을 오픈해야 한다고 한다. 그래서… 일단 방화벽 설정을 통해 포트를 오픈 했는데, 프로그램이 돌기 전에 이 방화벽이 제대로 열렸는지 확인을 해야했다.

그래서 첫번째 시도로, yum을 이용해서 telnet 서버라도 설치해볼까 했는데… dns 세팅도 안되어 있는 상황이었다.
여기서 좀 더 건드리자니 찝찝하고, 그럼 어떤짓을 해야 확인할 수 있을까 하다가 그냥 급하게 Echo Server를 하나 짜버렸다.

#-*- coding:utf-8 -*-

import socket, sys

class echo_server:
        def __init__(self, port):
                self.ip = '0.0.0.0'
                self.port = port
        def run(self):
                server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
                server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
                server.bind((self.ip, int(self.port)))

                while True:
                        server.listen(5)
                        client, addr = server.accept()
                        print " - %s client is connected" % addr[0]
                        client.sendall("welcome to echo server\n")
                        kill = False
                        while True:
                                msg = client.recv(1024)
                                print "   -", addr[0], "message :", msg.strip()
                                if msg.strip() in ['q', 'quit']:
                                        print "   -", addr[0], "message : quit command received"
                                        client.sendall("bye bye\n")
                                        break
                                if msg.strip() in ['k', 'kill']:
                                        print "   -", addr[0], "message : kill command received"
                                        print "   -", addr[0], "message : server killed bye client"
                                        client.sendall("bye bye\n")
                                        kill = True
                                        break
                                client.sendall("echo : " + msg)
                        client.close()
                        if kill: break
                server.close()


if __name__ == '__main__':
        es = echo_server(sys.argv[1])
        es.run()

해당 서버 사용법은

python [실행파일].py [PORT NUM]

이다. 이렇게 만들어 두고 외부에서 telnet을 통해서 접근해보면, 확인 끝!

나중에 급할 때, 써먹으려고 기록해둔다.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다