지난 DEFCON 18 예선 문제를 풀 때 만들었던 소켓 라이브러리입니다. 그 이후로 퍼징툴을 만들면서 조금씩 고쳤죠. 수신 모듈을 스레드로 활성화해서 네트워크를 통해 받은 데이터를 바로 콘솔에 출력합니다. 예외처리는 하지 않았습니다. connThread를 상속받는 코드에서 예외처리를 할 수 있습니다.
Method
- connThread (host, port)
– 소켓 생성자입니다. 접속할 IP주소(host)와 포트번호(port)를 입력받습니다.
- close ()
– 소켓을 닫습니다.
- reconnect ()
– 재연결합니다.
- sendMsg (msg, sec = 1)
– 메시지를 보냅니다. 메시지(msg)와 지연시간(sec)을 입력받습니다. 지연시간이 입력되지 않으면 기본적으로 1초로 설정됩니다.
- getMsg ()
– 가장 최근에 수신한 메시지를 반환합니다.
connThread.py
# -*- coding:utf-8 -*-
'''
* =====================================================================================
*
* Filename: connThread.py
*
* Description: The Library to control the socket communication with thread.
*
* Version: 1.1
* Created: 2010.08.17. 20:39:44
* Revision: none
* Compiler: Python
*
* Author: Yeonjae Kim (https://hisjournal.net/blog), 6l4ck3y3 (at) gmail.com
* Company: CERT-IS (http://www.cert-is.com)
*
* =====================================================================================
'''
import threading
import socket
import time
BUFSIZE = 4096
class connThread (threading.Thread):
def __init__ (self, host, port):
threading.Thread.__init__ (self)
self.__running = False
self.__sock = socket.socket (socket.AF_INET, socket.SOCK_STREAM)
self.__host = host
self.__port = port
self.__msg = ''
self.start ()
def run (self):
self.__running = True
self.__sock.connect ((self.__host, self.__port))
while self.__running and self.recvMsg ():
print self.__msg
def close (self):
self.__running = False
self.__sock.close ()
def reconnect (self):
self.__sock = socket.socket (socket.AF_INET, socket.SOCK_STREAM)
self.__sock.connect ((self.__host, self.__port))
self.__running = True
def sendMsg (self, msg, sec = 1):
print msg
self.__sock.send (msg + '\r\n')
time.sleep (sec)
def recvMsg (self):
self.__msg = self.__sock.recv (BUFSIZE)
return True
def getMsg (self):
return self.__msg