gpt4 book ai didi

python - 实验性 python tcp-proxy 不工作

转载 作者:可可西里 更新时间:2023-11-01 02:54:50 30 4
gpt4 key购买 nike

我只是尝试实现一个充当代理的 python 应用程序(用于端口 22)代码如下:

import socket
import select
import code
inputSock = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
inputSock.bind( ('',9999) )
inputSock.listen(5)
socks = {} #a dictionary!

#Now, wait for an input!
while 1:
#accept new conns
(sread,swrite,sexec) = select.select([inputSock],[],[])
for sock in sread:
print("Got an input!")
newsock,(remhost,remport) = sock.accept()
sendsock = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
try:
print("Now connecting to the centOS...")
sendsock.connect( ('202.131.30.12',80))
except:
print("ERROR: cannot connect to host 192.168.52.128:22")
print("successfully connected to Cent. Creating new socks")
socks[id(sendsock)] = newsock
socks[id(newsock)] = sendsock
print("socks created!")
#recv from socks, etc.
(sread,swrite,sexec) = select.select(socks.values(),[],[])
for sock in sread:
print("got input!")
data = sock.recv(700)
print(data)
if(data == ""):
#remove that sock.
id1 = id(sock)
id2 = id(socks[id1])
socks.pop(id1)
socks.pop(id2)
print("removed empty conns")
else:
#code.interact(globals=globals())
sendSock = socks[id(sock)]
sendSock.send(data)
print("data sent!")

现在,当我运行脚本并将浏览器指向 127.0.0.1:9999 时,我的浏览器将无法获取网页(处于某种“永远加载网页”状态)。这就是我从 python 提示符中得到的: http://imgur.com/CffOY

你能帮我找出我错在哪里并修复这个实验性实现吗?(或者给我一些链接以获得想法?)谢谢:)

最佳答案

您已经从浏览器读取了一些(可能是部分的)HTTP 请求数据,并将其发送到另一个套接字上的服务器。然后外循环将您带回监听套接字上的 select,它会阻止等待新连接,所以您被卡住了。

将对 select 的两个调用合并为一个。只需为监听套接字做一个特例即可。

关于python - 实验性 python tcp-proxy 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13821172/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com