cari
Rumahpembangunan bahagian belakangTutorial PythonPython实现简单的代理服务器

本文实例讲述了Python实现简单的代理服务器。分享给大家供大家参考。具体如下:

具备简单的管理功能,运行后 telnet localhost 9000 端口可以进行管理主要功能就是做包转发,如果有一个桥服务器,可以用来外网访问内网用,还是很管用的

#/bin/env python 
#coding:utf-8 
import socket,select,sys,time 
import thread 
s_list = [] 
def loop(cs,addr,s_ip,s_port): 
 print '%s %d connected.' % addr 
 ts = socket.socket() 
 try: 
  ts.connect((s_ip,s_port)) 
 except: 
  cs.close() 
  print '%s %d closed.' % addr 
  sys.exit(0) 
 while True: 
  rl,wl,xl = select.select([cs.fileno(),ts.fileno()],[],[cs.fileno(),ts.fileno()]) 
  if len(xl) > 0: 
   cs.close() 
   ts.close() 
   print '%s %d closed.' % addr 
   sys.exit(0) 
  if len(rl) > 0: 
   if rl[0] == cs.fileno(): 
    rs = ts 
    ws = cs 
   else: 
    rs = cs 
    ws = ts 
   try: 
    buffer = ws.recv(10000) 
    if len(buffer) == 0: 
     raise 
    rs.send(buffer) 
   except: 
    rs.close() 
    ts.close() 
    print '%s %d closed.' % addr 
    sys.exit(0) 
def mainserver(l_port,s_ip,s_port): 
 global s_list 
 try: 
  ss = socket.socket() 
  ss.bind(('0.0.0.0',l_port)) 
  ss.listen(10) 
  s_list.append((l_port,s_ip,s_port))   
 except: 
  sys.exit(0) 
 while True: 
  cs,addr = ss.accept() 
  thread.start_new_thread(loop,(cs,addr,s_ip,s_port)) 
def manager(l_port): 
 global start,s_list 
 ss = socket.socket() 
 ss.bind(('0.0.0.0',l_port)) 
 ss.listen(10) 
 while True: 
  cs,addr = ss.accept() 
  cs.send("""trans server 1.0\r\ntype 'help' to get help\r\n""")
  buffer = '' 
  while True: 
   buf = cs.recv(10000) 
   if len(buf) == 0: 
    cs.close() 
    break 
   if buf[-1] not in ('\r','\n'): 
    buffer += buf 
    continue 
   buffer += buf 
   cmd = buffer.strip() 
   buffer = '' 
   if cmd == 'exit': 
    cs.close() 
    break 
   elif cmd == 'stop': 
    start = 0 
    cs.close() 
    sys.exit(0) 
   elif cmd == 'list': 
    b = '' 
    for l in s_list: 
     b += '%4d %s:%d\r\n' % l 
    if len(b) > 0: 
     cs.send(b) 
   elif cmd in ('help','?'): 
    cs.send("""-------------------------------------------\r
exit\r 
 exit telnet\r 
start localport serverip:serverport\r 
 start a new server\r 
list\r 
 list all server\r 
-------------------------------------------\r 
""") 
   else: 
    cmds = cmd.split(" ",1) 
    if len(cmds) > 1 and cmds[0] == 'start': 
     args = cmds[1].strip().split(" ",1) 
     if len(args) != 2: 
      cs.send('start localport serverip:serverport\r\n') 
      continue 
     arg = args[1].split(":",1) 
     if len(arg) != 2: 
      cs.send('start localport serverip:serverport\r\n') 
      continue 
     try: 
      l_port = int(args[0]) 
      s_ip = arg[0] 
      s_port = int(arg[1]) 
     except: 
      cs.send('start localport serverip:serverport\r\n') 
      continue 
     thread.start_new_thread(mainserver,(l_port,s_ip,s_port)) 
     cs.send('start OK!\r\n') 
    else: 
     cs.send('no command [%s]\r\n' % cmd) 
     continue 
def main(): 
 global start 
 if len(sys.argv) == 3: 
  try: 
   l_port = int(sys.argv[1]) 
   s_ip,s_port = sys.argv[2].split(":") 
   s_port = int(s_port) 
   thread.start_new_thread(mainserver,(l_port,s_ip,s_port)) 
  except: 
   pass 
 start = 1 
 thread.start_new_thread(manager,(9000,)) 
 while start: 
  time.sleep(1) 
if __name__ == '__main__': 
 start = 0 
 main()

希望本文所述对大家的Python程序设计有所帮助。

Kenyataan
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Bagaimana tatasusunan digunakan dalam pengkomputeran saintifik dengan python?Bagaimana tatasusunan digunakan dalam pengkomputeran saintifik dengan python?Apr 25, 2025 am 12:28 AM

Arraysinpython, terutamanya yang, arecrucialinscientificificputingputingfortheirefficiencyandversatility.1) mereka yang digunakan untuk

Bagaimana anda mengendalikan versi python yang berbeza pada sistem yang sama?Bagaimana anda mengendalikan versi python yang berbeza pada sistem yang sama?Apr 25, 2025 am 12:24 AM

Anda boleh menguruskan versi python yang berbeza dengan menggunakan Pyenv, Venv dan Anaconda. 1) Gunakan pyenv untuk menguruskan pelbagai versi python: Pasang pyenv, tetapkan versi global dan tempatan. 2) Gunakan VENV untuk mewujudkan persekitaran maya untuk mengasingkan kebergantungan projek. 3) Gunakan Anaconda untuk menguruskan versi python dalam projek sains data anda. 4) Simpan sistem python untuk tugas peringkat sistem. Melalui alat dan strategi ini, anda dapat menguruskan versi Python yang berbeza untuk memastikan projek yang lancar.

Apakah beberapa kelebihan menggunakan array numpy melalui array python standard?Apakah beberapa kelebihan menggunakan array numpy melalui array python standard?Apr 25, 2025 am 12:21 AM

Numpyarrayshaveseveraladvantagesoverstanderardpythonarrays: 1) thearemuchfasterduetoc-assedimplementation, 2) thearemorememory-efficient, antyedlargedataSets, and3) theyofferoptimized, vectorizedfuncionsformathhematicalicalicalicialisation

Bagaimanakah sifat tatasusunan homogen mempengaruhi prestasi?Bagaimanakah sifat tatasusunan homogen mempengaruhi prestasi?Apr 25, 2025 am 12:13 AM

Kesan homogenitas tatasusunan pada prestasi adalah dwi: 1) homogenitas membolehkan pengkompil untuk mengoptimumkan akses memori dan meningkatkan prestasi; 2) tetapi mengehadkan kepelbagaian jenis, yang boleh menyebabkan ketidakcekapan. Singkatnya, memilih struktur data yang betul adalah penting.

Apakah beberapa amalan terbaik untuk menulis skrip python yang boleh dilaksanakan?Apakah beberapa amalan terbaik untuk menulis skrip python yang boleh dilaksanakan?Apr 25, 2025 am 12:11 AM

ToCraftExecutablePythonscripts, ikutiTheseBestPractics: 1) addAshebangline (#!/Usr/bin/envpython3) tomakethescriptexecutable.2) setpermissionswithchmod xyour_script.py.3)

Bagaimanakah array numpy berbeza dari tatasusunan yang dibuat menggunakan modul array?Bagaimanakah array numpy berbeza dari tatasusunan yang dibuat menggunakan modul array?Apr 24, 2025 pm 03:53 PM

Numpyarraysarebetterfornumericationsoperationsandmulti-dimensialdata, whiletheArrayModuleissuitiableforbasic, ingatan-efisienArrays.1) numpyexcelsinperformanceandfunctionalityforlargedatasetsandcomplexoperations.2) thearrayModeMoremoremory-efficientModeMoremoremoremory-efficientModeMoremoremoremory-efficenceismemoremoremoremoremoremoremoremory-efficenceismemoremoremoremoremorem

Bagaimanakah penggunaan array Numpy berbanding dengan menggunakan array modul array di Python?Bagaimanakah penggunaan array Numpy berbanding dengan menggunakan array modul array di Python?Apr 24, 2025 pm 03:49 PM

NumpyarraysareBetterforheavynumericalcomputing, whilethearraymoduleismoresuitifFormemory-constrainedprojectswithsimpledatypes.1) numpyarraysofferversativilityandperformanceForlargedATAsetSandcomplexoperations.2)

Bagaimanakah modul CTYPES berkaitan dengan tatasusunan di Python?Bagaimanakah modul CTYPES berkaitan dengan tatasusunan di Python?Apr 24, 2025 pm 03:45 PM

ctypesallowscreatingandmanipulatingc-stylearraysinpython.1) usectypestointerwithclibrariesforperformance.2) createec-stylearraysfornumericalcomputations.3) Passarraystocfuntionsforficientsoperations.however, becautiousofmemmemmemmemmemmemmemmemmemmemmemmemmemmemmemmemmemmemmemmemmemmemmemmemmemmemmemmemmemmemmemmemmemmemmemmemmemmemmemmemmemmemmemmemmemmemmemmemmemmemmemmemmemmemmemmemmemmemmemmemmemmemmemmemmemmemmemmemmemmemmemmemmemmemmemmemmemmemmemmemmemmemmem

See all articles

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Alat panas

Versi Mac WebStorm

Versi Mac WebStorm

Alat pembangunan JavaScript yang berguna

DVWA

DVWA

Damn Vulnerable Web App (DVWA) ialah aplikasi web PHP/MySQL yang sangat terdedah. Matlamat utamanya adalah untuk menjadi bantuan bagi profesional keselamatan untuk menguji kemahiran dan alatan mereka dalam persekitaran undang-undang, untuk membantu pembangun web lebih memahami proses mengamankan aplikasi web, dan untuk membantu guru/pelajar mengajar/belajar dalam persekitaran bilik darjah Aplikasi web keselamatan. Matlamat DVWA adalah untuk mempraktikkan beberapa kelemahan web yang paling biasa melalui antara muka yang mudah dan mudah, dengan pelbagai tahap kesukaran. Sila ambil perhatian bahawa perisian ini

SublimeText3 versi Inggeris

SublimeText3 versi Inggeris

Disyorkan: Versi Win, menyokong gesaan kod!

EditPlus versi Cina retak

EditPlus versi Cina retak

Saiz kecil, penyerlahan sintaks, tidak menyokong fungsi gesaan kod

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma