python :: Socket Communication with Thread

지난 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

Similar Posts

답글 남기기

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