가끔, 서버를 만지다 보면 난감할 때가 있다. 특히 그게 상용 서버라면… 굉장히 부담스럽다.
아무튼, 오늘 갑작스럽게 상용 서버를 건드려야 하는 순간이 왔다. 내용은 방화벽을 오픈해야 한다고 한다. 그래서… 일단 방화벽 설정을 통해 포트를 오픈 했는데, 프로그램이 돌기 전에 이 방화벽이 제대로 열렸는지 확인을 해야했다.
그래서 첫번째 시도로, 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을 통해서 접근해보면, 확인 끝!
나중에 급할 때, 써먹으려고 기록해둔다.