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

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

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

之前遇到一個場景是這樣的:

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

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

 

原理很簡單。

1.開一個socket server監(jiān)聽連接請求

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

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

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

 

下面上代碼。
 

#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正則表達式實例代碼

    python正則表達式實例代碼

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

    PyTorch中反卷積的用法詳解

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

    分享介紹Python的9個實用技巧

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

    pycharm運行按鈕灰色問題及解決

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

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

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

    Python制作一個PPT文本提取工具

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

    requests在python中發(fā)送請求的實例講解

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

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

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

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

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

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

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

最新評論

藁城市| 河北区| 沾化县| 太白县| 铜陵市| 乐陵市| 泸西县| 伊宁市| 西贡区| 连山| 靖远县| 徐闻县| 满城县| 孟连| 万州区| 万源市| 上蔡县| 来宾市| 庄浪县| 吴川市| 兰西县| 克拉玛依市| 尤溪县| 河西区| 沙坪坝区| 罗山县| 龙泉市| 崇信县| 聊城市| 玛纳斯县| 溆浦县| 罗城| 安义县| 海门市| 安龙县| 泉州市| 蓝田县| 扬中市| 全州县| 乐平市| 韶山市|