有什么方法可以socket.socket.recv
使用隐藏输入运行。例如,如果我要求输入密码,我希望隐藏输入,就好像我正在运行“sudo”bash 命令一样。
编辑:
socket.socket.recv
要求远程端的数据。当您连接到服务器时,它会要求您输入文本,当您输入文本时,它将显示在您的控制台中。现在,当您使用 sudo 命令时,它会要求您输入密码,但您看不到您输入的文本。我想要这样的东西socket.sock.recv
,这样你就不会看到你输入的密码。
编辑2:
当我说socket.socket.recv
我实际上是指socket._socketobject.recv
在我的程序中看起来像这样的东西时:client.recv(BUF_SIZE)
.
编辑 3:
我正在制作一个 telnet 服务器。client.recv(BUF_SIZE)
就像跑步raw_input
在客户端计算机上。那么有什么类似于getpass.getpass
在客户端计算机上运行的东西吗?
问问题
1847 次
3 回答
1
(响应编辑2)
这是一个简单的示例,说明如何编码某些数据是否为机密,并在函数之间传递该数据:
Python 2.6.2 (r262:71600, Sep 22 2009, 18:29:26)
[GCC 3.4.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> def capture(secret=False):
... if secret:
... from getpass import getpass
... return chr(0) + getpass("Enter some secret text now: ")
... else:
... return raw_input("Enter some text now: ")
...
>>> def display(data):
... if data[0] == chr(0):
... print "(Secret text hidden)"
... else:
... print data
...
>>> display( capture() )
Enter some text now: Hello
Hello
>>> display( capture(secret=True) )
Enter some secret text now:
(Secret text hidden)
>>>
如果您使用的是套接字,则需要s.sendall( capture() )
在一端使用,然后display( s.recv4096) )
在另一端使用。
于 2010-05-17T10:09:11.430 回答
1
socket.recv()
从套接字返回数据,你如何处理这些数据取决于你。
我猜你正在做这样的事情:
s.connect(...)
while True:
print s.recv(4096)
在这种情况下,您的问题是有人可能正在输入输入的远程端。
你能澄清你的问题吗?recv()
从不单独显示数据。
于 2010-05-14T20:33:23.710 回答
1
(针对提问者的解释)
如果您希望能够在控制台(文本模式)提示符处获得用户输入而不显示它,您可能希望使用getpass
.
Python 2.6.5 (r265:79063, Apr 16 2010, 13:09:56)
[GCC 4.4.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> from getpass import getpass
>>> p = getpass("Enter some text now: ")
Enter some text now:
>>> print p
secret
>>>
但是,这与套接字和网络完全无关。上面的变量p
包含用户输入的文本(即他们的密码)。如果您将其发送到与socket.sendall(p)
远程端的网络,将收到此数据。此时,由接收脚本决定如何处理数据......
于 2010-05-16T19:07:25.633 回答