最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python實(shí)現(xiàn)網(wǎng)絡(luò)端口轉(zhuǎn)發(fā)和重定向的方法

 更新時(shí)間:2016年09月19日 08:55:19   作者:RQSLT  
這篇文章主要介紹了Python實(shí)現(xiàn)網(wǎng)絡(luò)端口轉(zhuǎn)發(fā)和重定向的方法,結(jié)合實(shí)例形式分析了Python基于threading和socket模塊實(shí)現(xiàn)端口轉(zhuǎn)發(fā)與重定向的具體操作技巧,需要的朋友可以參考下

本文實(shí)例講述了Python實(shí)現(xiàn)網(wǎng)絡(luò)端口轉(zhuǎn)發(fā)和重定向的方法。分享給大家供大家參考,具體如下:

【任務(wù)】

需要將某個(gè)網(wǎng)絡(luò)端口轉(zhuǎn)發(fā)到另一個(gè)主機(jī)(forwarding),但可能會(huì)是不同的端口(redirecting)。

【解決方案】

兩個(gè)使用threading和socket模塊的類就能完成我們需要的端口轉(zhuǎn)發(fā)和重定向。

#encoding=utf8
#author: walker摘自《Python Cookbook(2rd)》
#date: 2015-06-11
#function: 網(wǎng)絡(luò)端口的轉(zhuǎn)發(fā)和重定向(適用于python2/python3)
import sys, socket, time, threading
LOGGING = True
loglock = threading.Lock()
#打印日志到標(biāo)準(zhǔn)輸出
def log(s, *a):
  if LOGGING:
    loglock.acquire()
    try:
      print('%s:%s' % (time.ctime(), (s % a)))
      sys.stdout.flush()
    finally:
      loglock.release()
class PipeThread(threading.Thread):
  pipes = []   #靜態(tài)成員變量,存儲(chǔ)通訊的線程編號(hào)
  pipeslock = threading.Lock()
  def __init__(self, source, sink):
    #Thread.__init__(self) #python2.2之前版本適用
    super(PipeThread, self).__init__()
    self.source = source
    self.sink = sink
    log('Creating new pipe thread %s (%s -> %s)',
        self, source.getpeername(), sink.getpeername())
    self.pipeslock.acquire()
    try:
      self.pipes.append(self)
    finally:
      self.pipeslock.release()
    self.pipeslock.acquire()
    try:
      pipes_now = len(self.pipes)
    finally:
      self.pipeslock.release()
    log('%s pipes now active', pipes_now)
  def run(self):
    while True:
      try:
        data = self.source.recv(1024)
        if not data:
          break
        self.sink.send(data)
      except:
        break
    log('%s terminating', self)
    self.pipeslock.acquire()
    try:
      self.pipes.remove(self)
    finally:
      self.pipeslock.release()
    self.pipeslock.acquire()
    try:
      pipes_left = len(self.pipes)
    finally:
      self.pipeslock.release()
    log('%s pipes still active', pipes_left)
class Pinhole(threading.Thread):
  def __init__(self, port, newhost, newport):
    #Thread.__init__(self) #python2.2之前版本適用
    super(Pinhole, self).__init__()
    log('Redirecting: localhost: %s->%s:%s', port, newhost, newport)
    self.newhost = newhost
    self.newport = newport
    self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    self.sock.bind(('', port))
    self.sock.listen(5) #參數(shù)為timeout,單位為秒
  def run(self):
    while True:
      newsock, address = self.sock.accept()
      log('Creating new session for %s:%s', *address)
      fwd = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
      fwd.connect((self.newhost, self.newport))
      PipeThread(newsock, fwd).start() #正向傳送
      PipeThread(fwd, newsock).start() #逆向傳送
if __name__ == '__main__':
  print('Starting Pinhole port fowarder/redirector')
  try:
    port = int(sys.argv[1])
    newhost = sys.argv[2]
    try:
      newport = int(sys.argv[3])
    except IndexError:
      newport = port
  except (ValueError, IndexError):
    print('Usage: %s port newhost [newport]' % sys.argv[0])
    sys.exit(1)
  #sys.stdout = open('pinhole.log', 'w') #將日志寫(xiě)入文件
  Pinhole(port, newhost, newport).start()

【討論】

當(dāng)你在管理一個(gè)網(wǎng)絡(luò)時(shí),即使是一個(gè)很小的網(wǎng)絡(luò),端口轉(zhuǎn)發(fā)和重定向的功能有時(shí)也能給你很大的幫助。一些不在你的控制之下的應(yīng)用或者服務(wù)可能是以硬連接的方式接入到某個(gè)特定的服務(wù)器的地址或端口。通過(guò)插入轉(zhuǎn)發(fā)和重定向,你就能將對(duì)應(yīng)用的連接請(qǐng)求發(fā)送到其他更合適的主機(jī)或端口上。

更多關(guān)于Python相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Python URL操作技巧總結(jié)》、《Python Socket編程技巧總結(jié)》、《Python圖片操作技巧總結(jié)》、《Python數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Python函數(shù)使用技巧總結(jié)》、《Python字符串操作技巧匯總》、《Python入門(mén)與進(jìn)階經(jīng)典教程》及《Python文件與目錄操作技巧匯總

希望本文所述對(duì)大家Python程序設(shè)計(jì)有所幫助。

相關(guān)文章

  • Python實(shí)現(xiàn)鏈表反轉(zhuǎn)與合并操作詳解

    Python實(shí)現(xiàn)鏈表反轉(zhuǎn)與合并操作詳解

    這篇文章主要為大家詳細(xì)介紹了?Python?中反轉(zhuǎn)鏈表和合并鏈表的應(yīng)用場(chǎng)景及實(shí)現(xiàn)方法,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解下
    2025-02-02
  • Python中捕捉詳細(xì)異常信息的代碼示例

    Python中捕捉詳細(xì)異常信息的代碼示例

    這篇文章主要介紹了Python中捕捉詳細(xì)異常信息的代碼示例,本文的代碼是從Python 2.7的源碼中得來(lái),可以獲取文件位置、行號(hào)、函數(shù)、異常信息等內(nèi)容,需要的朋友可以參考下
    2014-09-09
  • Python使用paramiko操作linux的方法講解

    Python使用paramiko操作linux的方法講解

    今天小編就為大家分享一篇關(guān)于Python使用paramiko操作linux的方法講解,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2019-02-02
  • 為python爬蟲(chóng)docker鏡像添加nodejs環(huán)境實(shí)現(xiàn)方法

    為python爬蟲(chóng)docker鏡像添加nodejs環(huán)境實(shí)現(xiàn)方法

    這篇文章主要為大家介紹了為python爬蟲(chóng)docker鏡像添加nodejs環(huán)境實(shí)現(xiàn)方法,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-09-09
  • python應(yīng)用文件讀取與登錄注冊(cè)功能

    python應(yīng)用文件讀取與登錄注冊(cè)功能

    這篇文章主要介紹了python應(yīng)用文件讀取寫(xiě)登錄注冊(cè)功能,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-09-09
  • pygame實(shí)現(xiàn)井字棋之第一步繪制九宮格

    pygame實(shí)現(xiàn)井字棋之第一步繪制九宮格

    這篇文章主要介紹了pygame實(shí)現(xiàn)井字棋之第一步繪制九宮格,文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)python的小伙伴們有非常好的幫助,需要的朋友可以參考下
    2021-05-05
  • Python將多個(gè)list合并為1個(gè)list的方法

    Python將多個(gè)list合并為1個(gè)list的方法

    今天小編就為大家分享一篇Python將多個(gè)list合并為1個(gè)list的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-06-06
  • python3使用smtplib實(shí)現(xiàn)發(fā)送郵件功能

    python3使用smtplib實(shí)現(xiàn)發(fā)送郵件功能

    這篇文章主要為大家詳細(xì)介紹了python3使用smtplib實(shí)現(xiàn)發(fā)送郵件功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-05-05
  • Python使用PyGreSQL操作PostgreSQL數(shù)據(jù)庫(kù)教程

    Python使用PyGreSQL操作PostgreSQL數(shù)據(jù)庫(kù)教程

    這篇文章主要介紹了Python使用PyGreSQL操作PostgreSQL數(shù)據(jù)庫(kù),需要的朋友可以參考下
    2014-07-07
  • 詳解python中的變量與注釋

    詳解python中的變量與注釋

    在 Python 中,變量是用于存儲(chǔ)數(shù)據(jù)的名稱,它可以保存不同類型的數(shù)據(jù),在Python中,有兩種類型的注釋:?jiǎn)涡凶⑨尯投嘈凶⑨?本文就給大家詳細(xì)的介紹一下python中的變量與注釋,需要的朋友可以參考下
    2023-08-08

最新評(píng)論

宝清县| 南宫市| 长汀县| 改则县| 河北区| 普定县| 正镶白旗| 阜阳市| 雅安市| 邵武市| 保德县| 荆门市| 金山区| 荣昌县| 定兴县| 保亭| 乌审旗| 岫岩| 昌邑市| 遵义县| 北辰区| 弥渡县| 大连市| 金平| 辽宁省| 新密市| 三门县| 焦作市| 洪泽县| 邢台市| 台中市| 苍山县| 石泉县| 米泉市| 南丰县| 东城区| 巩留县| 沧州市| 沛县| 屯留县| 淮滨县|