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

僅用50行Python代碼實(shí)現(xiàn)一個(gè)簡單的代理服務(wù)器

 更新時(shí)間:2015年04月08日 09:59:31   投稿:goldensun  
這篇文章主要介紹了僅用50行Python代碼實(shí)現(xiàn)一個(gè)簡單的代理服務(wù)器,利用最簡單的client->proxy->forward原理在socket模塊下編寫,需要的朋友可以參考下

之前遇到一個(gè)場(chǎng)景是這樣的:

我在自己的電腦上需要用mongodb圖形客戶端,但是mongodb的服務(wù)器地址沒有對(duì)外網(wǎng)開放,只能通過先登錄主機(jī)A,然后再從A連接mongodb服務(wù)器B。

本來想通過ssh端口轉(zhuǎn)發(fā)的,但是我沒有從機(jī)器A連接ssh到B的權(quán)限。于是就自己用python寫一個(gè)。

 

原理很簡單。

1.開一個(gè)socket server監(jiān)聽連接請(qǐng)求

2.每接受一個(gè)客戶端的連接請(qǐng)求,就往要轉(zhuǎn)發(fā)的地址建一條連接請(qǐng)求。即client->proxy->forward。proxy既是socket服務(wù)端(監(jiān)聽client),也是socket客戶端(往forward請(qǐng)求)。

3.把client->proxy和proxy->forward這2條socket用字典給綁定起來。

4.通過這個(gè)映射的字典把send/recv到的數(shù)據(jù)原封不動(dòng)的傳遞

 

下面上代碼。
 

#coding=utf-8 
import socket 
import select 
import sys 
  
to_addr = ('xxx.xxx.xx.xxx', 10000)#轉(zhuǎn)發(fā)的地址 
  
class Proxy: 
  def __init__(self, addr): 
    self.proxy = socket.socket(socket.AF_INET,socket.SOCK_STREAM) 
    self.proxy.bind(addr) 
    self.proxy.listen(10) 
    self.inputs = [self.proxy] 
    self.route = {} 
  
  def serve_forever(self): 
    print 'proxy listen...' 
    while 1: 
      readable, _, _ = select.select(self.inputs, [], []) 
      for self.sock in readable: 
        if self.sock == self.proxy: 
          self.on_join() 
        else: 
          data = self.sock.recv(8096) 
          if not data: 
            self.on_quit() 
          else: 
            self.route[self.sock].send(data) 
  
  def on_join(self): 
    client, addr = self.proxy.accept() 
    print addr,'connect' 
    forward = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
    forward.connect(to_addr) 
    self.inputs += [client, forward] 
    self.route[client] = forward 
    self.route[forward] = client 
  
  def on_quit(self): 
    for s in self.sock, self.route[self.sock]: 
      self.inputs.remove(s) 
      del self.route[s] 
      s.close() 
  
if __name__ == '__main__': 
  try: 
    Proxy(('',12345)).serve_forever()#代理服務(wù)器監(jiān)聽的地址 
  except KeyboardInterrupt: 
    sys.exit(1)

相關(guān)文章

  • python正則表達(dá)式實(shí)例代碼

    python正則表達(dá)式實(shí)例代碼

    這篇文章主要介紹了python正則表達(dá)式的一些實(shí)例代碼,方便學(xué)習(xí)python的朋友,需要的朋友可以參考下
    2020-03-03
  • PyTorch中反卷積的用法詳解

    PyTorch中反卷積的用法詳解

    今天小編就為大家分享一篇PyTorch中反卷積的用法詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-12-12
  • 分享介紹Python的9個(gè)實(shí)用技巧

    分享介紹Python的9個(gè)實(shí)用技巧

    本文將介紹15個(gè)簡潔的Python技巧,向著簡潔更高效,學(xué)習(xí)易懂出發(fā),具說只有經(jīng)驗(yàn)豐富程序員才知道的9種高級(jí)Python小技巧,喜歡的朋友快來看看吧
    2021-11-11
  • pycharm運(yùn)行按鈕灰色問題及解決

    pycharm運(yùn)行按鈕灰色問題及解決

    這篇文章主要介紹了pycharm運(yùn)行按鈕灰色問題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • Python實(shí)現(xiàn)畫圖軟件功能方法詳解

    Python實(shí)現(xiàn)畫圖軟件功能方法詳解

    這篇文章主要介紹了 Python實(shí)現(xiàn)畫圖軟件功能方法詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • Python制作一個(gè)PPT文本提取工具

    Python制作一個(gè)PPT文本提取工具

    這篇文章主要為大家詳細(xì)介紹了如何使用Python開發(fā)一個(gè)帶圖形界面的PPT文本提取工具,可以從PPTX文件中提取所有文本內(nèi)容,有需要的小伙伴可以了解下
    2025-01-01
  • requests在python中發(fā)送請(qǐng)求的實(shí)例講解

    requests在python中發(fā)送請(qǐng)求的實(shí)例講解

    在本篇文章里小編給大家整理的是一篇關(guān)于requests在python中發(fā)送請(qǐng)求的實(shí)例講解內(nèi)容,有興趣的朋友們可以測(cè)試學(xué)習(xí)下。
    2021-02-02
  • python中response.text 和response.content的區(qū)別詳解

    python中response.text 和response.content的區(qū)別詳解

    這篇文章主要介紹了python中response.text 和response.content的區(qū)別詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-05-05
  • python opencv實(shí)現(xiàn)圖片缺陷檢測(cè)(講解直方圖以及相關(guān)系數(shù)對(duì)比法)

    python opencv實(shí)現(xiàn)圖片缺陷檢測(cè)(講解直方圖以及相關(guān)系數(shù)對(duì)比法)

    這篇文章主要介紹了python opencv 圖片缺陷檢測(cè),主要講解直方圖以及相關(guān)系數(shù)對(duì)比法,本文通過實(shí)例截圖給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-04-04
  • Python列表轉(zhuǎn)一維DataFrame的完整指南

    Python列表轉(zhuǎn)一維DataFrame的完整指南

    在數(shù)據(jù)處理領(lǐng)域,Pandas的DataFrame是當(dāng)之無愧的王者,本文將用5個(gè)核心方法,教你優(yōu)雅地將一維列表轉(zhuǎn)換為Pandas DataFrame,感興趣的可以了解下
    2025-04-04

最新評(píng)論

兴文县| 连云港市| 枝江市| 塘沽区| 子洲县| 清涧县| 内黄县| 海伦市| 扎兰屯市| 奈曼旗| 绿春县| 古蔺县| 蒙城县| 荣成市| 阳原县| 三亚市| 房山区| 尖扎县| 彰化市| 平罗县| 乌海市| 营口市| 平和县| 大宁县| 甘德县| 辽阳县| 龙口市| 泗水县| 凤冈县| 封丘县| 宁阳县| 绥棱县| 连云港市| 天津市| 东乡县| 巴林左旗| 固始县| 江北区| 康马县| 东乡| 武冈市|