Python實現TCP/IP協議下的連接埠轉寄及重新導向樣本

來源:互聯網
上載者:User
首先,我們用webpy寫一個簡單的網站,監聽8080連接埠,返回“Hello, EverET.org”的頁面。

然後我們使用我們的forwarding.py,在80連接埠和8080連接埠中間建立兩條通訊管道用於雙向通訊。

此時,我們通過80連接埠訪問我們的伺服器。

瀏覽器得到:

然後,我們在forwarding.py的輸出結果中可以看到瀏覽器和webpy之間的通訊內容。


代碼:

#!/usr/bin/env pythonimport sys, socket, time, threadingloglock = threading.Lock()def log(msg):  loglock.acquire()  try:    print '[%s]: \n%s\n' % (time.ctime(), msg.strip())    sys.stdout.flush()  finally:    loglock.release()class PipeThread(threading.Thread):  def __init__(self, source, target):    threading.Thread.__init__(self)    self.source = source    self.target = target  def run(self):    while True:      try:        data = self.source.recv(1024)        log(data)        if not data: break        self.target.send(data)      except:        break    log('PipeThread done')class Forwarding(threading.Thread):  def __init__(self, port, targethost, targetport):    threading.Thread.__init__(self)    self.targethost = targethost    self.targetport = targetport    self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)    self.sock.bind(('0.0.0.0', port))    self.sock.listen(10)  def run(self):    while True:      client_fd, client_addr = self.sock.accept()      target_fd = socket.socket(socket.AF_INET, socket.SOCK_STREAM)      target_fd.connect((self.targethost, self.targetport))      log('new connect')      # two direct pipe      PipeThread(target_fd, client_fd).start()      PipeThread(client_fd, target_fd).start()if __name__ == '__main__':  print 'Starting'  import sys  try:    port = int(sys.argv[1])    targethost = sys.argv[2]    try: targetport = int(sys.argv[3])    except IndexError: targetport = port  except (ValueError, IndexError):    print 'Usage: %s port targethost [targetport]' % sys.argv[0]    sys.exit(1)  #sys.stdout = open('forwaring.log', 'w')  Forwarding(port, targethost, targetport).start()
  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.