1

有什么方法可以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在客户端计算机上运行的东西吗?

4

3 回答 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 回答