Python Telnet服务器崩溃
每当我的客户通过telnet连接到我的服务器时
telnet myip 43
当客户在自己的机器上不断按ctrl+c时,会导致telnet服务器崩溃……我该如何阻止这种情况?另外,我的服务器有没有可能受到缓冲区溢出的攻击?
这是我的脚本(非常简单的脚本)
#!/usr/bin/env python
import sys
import socket
import urllib2
def main():
s = socket.socket() # Create a socket object
host = ''
BUFFER_SIZE = 2048
port = 43 # Reserve a port for your service.
s.bind((host, port)) # Bind to the port
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
s.listen(120) # Now wait for client connection.
while True:
data = ''
print 'waiting for connection...'
c, addr = s.accept() # Establish connection with client.
print 'Got connection from', addr
data = c.recv(BUFFER_SIZE)
print 'requested website: '+data
print x
c.send(x)
c.close() # Close the connection
if __name__ == '__main__':
main()
1 个回答
1
可以试试这个方法:
import string
valid_chars = "-_.() %s%s" % (string.ascii_letters, string.digits)
[...]
data = c.recv(BUFFER_SIZE)
data=''.join(c for c in data if c in valid_chars)
print 'requested website: '+data
if len(data)>0:
try:
urllib2.urlopen('localhost:2020/?id='+data ).read()
print x
c.send(x)
except:
pass
c.close() # Close the connection
把valid_chars
里的内容修改一下,只允许你想要的那些字符。