最新国产好看的视频,伊人天堂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),但可能會是不同的端口(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)成員變量,存儲通訊的線程編號
  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') #將日志寫入文件
  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ù)器的地址或端口。通過插入轉(zhuǎn)發(fā)和重定向,你就能將對應(yī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入門與進(jìn)階經(jīng)典教程》及《Python文件與目錄操作技巧匯總

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

相關(guān)文章

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

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

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

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

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

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

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

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

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

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

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

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

    這篇文章主要介紹了pygame實(shí)現(xiàn)井字棋之第一步繪制九宮格,文中有非常詳細(xì)的代碼示例,對正在學(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à)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    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ù)庫教程

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

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

    詳解python中的變量與注釋

    在 Python 中,變量是用于存儲數(shù)據(jù)的名稱,它可以保存不同類型的數(shù)據(jù),在Python中,有兩種類型的注釋:單行注釋和多行注釋,本文就給大家詳細(xì)的介紹一下python中的變量與注釋,需要的朋友可以參考下
    2023-08-08

最新評論

密云县| 博乐市| 洮南市| 本溪市| 临朐县| 绵竹市| 太原市| 延吉市| 府谷县| 江孜县| 耿马| 吴忠市| 桐乡市| 孟津县| 凤庆县| 汕头市| 邛崃市| 岑巩县| 三原县| 宜都市| 惠来县| 江津市| 罗源县| 永泰县| 二手房| 碌曲县| 甘泉县| 汶上县| 五河县| 通榆县| 永川市| 祁门县| 宜黄县| 明水县| 太保市| 延吉市| 通海县| 景东| 红安县| 新民市| 富蕴县|