国产99久久精品_欧美日本韩国一区二区_激情小说综合网_欧美一级二级视频_午夜av电影_日本久久精品视频

最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
當前位置: 首頁 - 科技 - 知識百科 - 正文

python實現簡單的TCP代理服務器

來源:懂視網 責編:小采 時間:2020-11-27 14:40:52
文檔

python實現簡單的TCP代理服務器

python實現簡單的TCP代理服務器:本文實例講述了python實現簡單的TCP代理服務器的方法,分享給大家供大家參考。 具體實現代碼如下: # -*- coding: utf-8 -*- ''' filename:rtcp.py @desc: 利用python的socket端口轉發,用于遠程維護 如果連接不到遠程,會sleep 36s,最多嘗試2
推薦度:
導讀python實現簡單的TCP代理服務器:本文實例講述了python實現簡單的TCP代理服務器的方法,分享給大家供大家參考。 具體實現代碼如下: # -*- coding: utf-8 -*- ''' filename:rtcp.py @desc: 利用python的socket端口轉發,用于遠程維護 如果連接不到遠程,會sleep 36s,最多嘗試2

本文實例講述了python實現簡單的TCP代理服務器的方法,分享給大家供大家參考。

具體實現代碼如下:

# -*- coding: utf-8 -*-

'''
filename:rtcp.py
@desc:
利用python的socket端口轉發,用于遠程維護
如果連接不到遠程,會sleep 36s,最多嘗試200(即兩小時)

@usage:
./rtcp.py stream1 stream2
stream為:l:port或c:host:port
l:port表示監聽指定的本地端口
c:host:port表示監聽遠程指定的端口

@author: watercloud, zd, knownsec team
@web: www.knownsec.com, blog.knownsec.com
@date: 2009-7
'''

import socket
import sys
import threading
import time

streams = [None, None] # 存放需要進行數據轉發的兩個數據流(都是SocketObj對象)
debug = 1 # 調試狀態 0 or 1

def _usage():
 print 'Usage: ./rtcp.py stream1 stream2
stream : l:port or c:host:port'

def _get_another_stream(num):
 '''
 從streams獲取另外一個流對象,如果當前為空,則等待
 '''
 if num == 0:
 num = 1
 elif num == 1:
 num = 0
 else:
 raise "ERROR"

 while True:
 if streams[num] == 'quit':
 print("can't connect to the target, quit now!")
 sys.exit(1)

 if streams[num] != None:
 return streams[num]
 else:
 time.sleep(1)

def _xstream(num, s1, s2):
 '''
 交換兩個流的數據
 num為當前流編號,主要用于調試目的,區分兩個回路狀態用。
 '''
 try:
 while True:
 #注意,recv函數會阻塞,直到對端完全關閉(close后還需要一定時間才能關閉,最快關閉方法是shutdow)
 buff = s1.recv(1024)
 if debug > 0:
 print num,"recv"
 if len(buff) == 0: #對端關閉連接,讀不到數據
 print num,"one closed"
 break
 s2.sendall(buff)
 if debug > 0:
 print num,"sendall"
 except :
 print num,"one connect closed."

 try:
 s1.shutdown(socket.SHUT_RDWR)
 s1.close()
 except:
 pass

 try:
 s2.shutdown(socket.SHUT_RDWR)
 s2.close()
 except:
 pass

 streams[0] = None
 streams[1] = None
 print num, "CLOSED"

def _server(port, num):
 '''
 處理服務情況,num為流編號(第0號還是第1號)
 '''
 srv = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
 srv.bind(('0.0.0.0', port))
 srv.listen(1)
 while True:
 conn, addr = srv.accept()
 print "connected from:", addr
 streams[num] = conn # 放入本端流對象
 s2 = _get_another_stream(num) # 獲取另一端流對象
 _xstream(num, conn, s2)

def _connect(host, port, num):
 ''' 處理連接,num為流編號(第0號還是第1號)

 @note: 如果連接不到遠程,會sleep 36s,最多嘗試200(即兩小時)
 '''
 not_connet_time = 0
 wait_time = 36
 try_cnt = 199
 while True:
 if not_connet_time > try_cnt:
 streams[num] = 'quit'
 print('not connected')
 return None

 conn = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
 try:
 conn.connect((host, port))
 except Exception, e:
 print ('can not connect %s:%s!' % (host, port))
 not_connet_time += 1
 time.sleep(wait_time)
 continue

 print "connected to %s:%i" % (host, port)
 streams[num] = conn #放入本端流對象
 s2 = _get_another_stream(num) #獲取另一端流對象
 _xstream(num, conn, s2)


if __name__ == '__main__':
 if len(sys.argv) != 3:
 _usage()
 sys.exit(1)
 tlist = [] # 線程列表,最終存放兩個線程對象
 targv = [sys.argv[1], sys.argv[2] ]
 for i in [0, 1]:
 s = targv[i] # stream描述 c:ip:port 或 l:port
 sl = s.split(':')
 if len(sl) == 2 and (sl[0] == 'l' or sl[0] == 'L'): # l:port
 t = threading.Thread(target=_server, args=(int(sl[1]), i))
 tlist.append(t)
 elif len(sl) == 3 and (sl[0] == 'c' or sl[0] == 'C'): # c:host:port
 t = threading.Thread(target=_connect, args=(sl[1], int(sl[2]), i))
 tlist.append(t)
 else:
 _usage()
 sys.exit(1)

 for t in tlist:
 t.start()
 for t in tlist:
 t.join()
 sys.exit(0)

完整實例代碼點擊此處本站下載。

希望本文所述對大家的Python程序設計有所幫助。

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文檔

python實現簡單的TCP代理服務器

python實現簡單的TCP代理服務器:本文實例講述了python實現簡單的TCP代理服務器的方法,分享給大家供大家參考。 具體實現代碼如下: # -*- coding: utf-8 -*- ''' filename:rtcp.py @desc: 利用python的socket端口轉發,用于遠程維護 如果連接不到遠程,會sleep 36s,最多嘗試2
推薦度:
  • 熱門焦點

最新推薦

猜你喜歡

熱門推薦

專題
Top
主站蜘蛛池模板: 国产性做久久久久久 | 亚洲精品免费在线观看 | 熟年交尾五十路视频在线播放 | 亚洲成人99| 欧美xxx性 | 国产精品久久久久久久y | 国产成人久久久精品毛片 | 九九精品成人免费国产片 | 欧美精品第一页 | 在线精品亚洲欧洲第一页 | 国内偷拍第一页 | 欧美视频网站在线观看 | 福利视频欧美一区二区三区 | 日韩亚洲欧美一区 | 精品一区二区三区四区电影 | 日本在线不卡一区二区 | 国产网站精品 | 国产成人久久综合二区 | 国产成人91一区二区三区 | 国产a国产片 | 国产亚洲欧美一区二区三区 | 欧美在线一区二区三区不卡 | 国产区精品在线 | 一区二区三区在线 | 午夜欧美 | 91亚洲国产成人久久精品网站 | 久久伊人一区二区三区四区 | 国产一区三区二区中文在线 | 欧美精品国产 | 亚洲欧美日韩在线观看二区 | 免费中国女人69xxxxx视频 | 午夜免费福利视频 | 韩国美女vip福利一区 | 国产一精品一aⅴ一免费 | 欧美亚洲综合另类 | 欧美不卡一区 | 亚洲精品成人久久久影院 | 国产日韩在线视频 | 精品国产91 | 中文字幕日韩有码 | 国产日产欧美精品一区二区三区 |