proxy->forward。proxy" />

亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

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

系統(tǒng) 1944 0

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

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

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

?

原理很簡(jiǎn)單。

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

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

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

4.通過(guò)這個(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)聽(tīng)的地址 
  except KeyboardInterrupt: 
    sys.exit(1)

          


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 国产伦一区二区三区免费 | 日本中文字幕在线播放 | 天天射天天操天天干 | 伊人一道本| 毛片你懂的 | 久色网| 2020国产成人精品视频人 | 亚洲综合久久综合激情久久 | 久久精品欧美一区二区 | 玖玖草在线观看 | 久久成人综合网 | 亚洲国产天堂久久综合9999 | 中文亚洲欧美 | 精品欧美一区二区三区精品久久 | 五月婷婷丁香在线视频 | 欧美三级一区二区 | h视频日本 | 国产欧美亚洲另类第一页 | 99精品中文字幕 | 亚洲国产精品久久久天堂 | 亚洲另类伦春色综合妖色成人网 | 日韩欧美毛片免费看播放 | 五月综合激情久久婷婷 | 99久久精品国产交换 | 春色www在线视频观看 | 亚洲精品美女国产一区 | 99综合之综合久久伊人 | 久青草网站 | 福利视频一区 | 国产成人一区二区三区精品久久 | 一级毛片aa | 成人美女黄网站色大色费 | 99热这里只有精品国产99 | 99久久中文字幕伊人情人 | 亚洲精品成人7777在线观看 | 老司机免费福利影院 | 一类毛片 | 亚洲黄色免费看 | 伊人婷婷色 | 亚洲精品欧洲精品 | 亚洲欧美日韩网站 |