我目前正在用Python编写一个telnet服务器.这是一个内容服务器.人们将通过telnet连接到服务器,并呈现纯文本内容.
我的问题是服务器显然需要支持多个同时连接.我现在的实现只支持一个.
这是我开始使用的基本概念验证服务器(虽然程序随着时间的推移发生了很大变化,但基本的telnet框架却没有):
import socket, os
class Server:
def __init__(self):
self.host, self.port = 'localhost', 50000
self.socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.socket.bind((self.host, self.port))
def send(self, msg):
if type(msg) == str: self.conn.send(msg + end)
elif type(msg) == list or tuple: self.conn.send('\n'.join(msg) + end)
def recv(self):
self.conn.recv(4096).strip()
def exit(self):
self.send('Disconnecting you...'); self.conn.close(); self.run()
# closing a connection, opening a new one
# main runtime
def run(self):
self.socket.listen(1)
self.conn, self.addr = self.socket.accept()
# there would be more activity here
# i.e.: sending things to the …
Run Code Online (Sandbox Code Playgroud) 我正在使用Ubuntu telnet客户端.我试图通过我所做的telnet连接发送2行.
例如:
> telnet en.wikipedia.org 80
GET /wiki/Main_Page http/1.1 <CR> // line 1
Host: en.wikipedia.org <CR> // line 2
<CR>
Run Code Online (Sandbox Code Playgroud)
其中CR代表回车.问题是在键入第1行,按CR后,该行将通过telnet连接发送.之后我无法立即发送第2行.
有人可以帮忙吗?
试图了解我正在玩telnet发送请求的http和标题.不要一次又一次地输入所有内容我想我会用我需要的所有命令编写一个小文本文件.
我的文件很简单如下:
GET /somefile.php HTTP/1.1
Host: localhost
Run Code Online (Sandbox Code Playgroud)
我然后尝试使用io重定向将其提供给telnet:
$ telnet localhost 80 < telnet.txt
Run Code Online (Sandbox Code Playgroud)
但我得到的所有输出都是
Trying ::1...
Connected to localhost.
Escape character is '^]'.
Connection closed by foreign host.
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
嘿,我可以用"telnet localhost 4242"登录telnet现在我想执行一个命令"show network".
我怎么能在一行中做到这一点?
类似的东西
$ telnet localhost 4242 < - "show network"
我想要的输出
我有一台服务器接受telnet连接进行管理.我想念命令历史记录,所以我想让我的telnet会话支持它.我的问题:
1)我是否必须在服务器端实现,因此服务器会将过去的命令发送到客户端,然后客户端可以重新执行?
2)无论如何在telnet客户端中实现此功能(而不是弄乱服务器)?
如果答案是1)那么我需要知道如何捕获并发送我的telnet会话上的向上和向下箭头键,而不必按Enter键.
我已经在远程服务器上安装了CouchDB,我可以通过终端telnet/ssh客户端访问该服务器.
服务器在CentOS6上运行.
我真的希望能够使用Futon,但我现在不能,因为我只能在ssh客户端中打开localhost:5984.
关于如何解决这个问题的任何建议?
我有一个创建文件的bash脚本,我想通过telnet发送电子邮件.然而,有时它会执行,有时它不会执行.
最后的命令是
cat tempfile | telnet mail.domain.com 25
Run Code Online (Sandbox Code Playgroud)
在接收服务器上,我在mail.log中看到失败时出现以下错误:
improper command pipelining after EHLO from domain.com ....etc
Run Code Online (Sandbox Code Playgroud)
如果不是mail.domain.com,那么相同的脚本可以正常工作.我在localhost中启动telnet会话,所以我很确定文件格式是否正常,其余的bash脚本也正常工作.
我也尝试过使用标准重定向而不是管道
telnet mail.domain.com 25 < tempfile
Run Code Online (Sandbox Code Playgroud)
但有时候结果有时是好的.我认为重定向和telnet会话命令之间需要有一个小的延迟,以便在建立telnet会话并给出响应后给出输入,但我不知道如何做到这一点.我尝试在管道和重定向之间使用sleep命令,它可能无法工作,因为这时输入被重定向到sleep命令.
e.g. cat tempfile | telnet mail.domain.com 25 & sleep 1
Run Code Online (Sandbox Code Playgroud)
限制是我必须在bash脚本中执行此操作.可能吗?此外,我不知道它是否有任何重要性,但脚本用于在debian挤压服务器之间工作与后缀/快递设置,现在接收端设置与debian wheezy和postfix/dovecot.
在此先感谢您的帮助
这很简单吗?有人有任何好的例子吗?我所有的谷歌搜索都返回了关于如何在dotNet上制作telnet客户端的项目,但这对我来说太过分了.我想用C#做这个.
谢谢!
我最近开始搞乱Java套接字和telnet ......
我希望用户能够连接到服务器,只需键入一个字母并将其发送到服务器,而无需按Enter键发送它.我确定服务器没有办法设置它,但也许telnet有一个参数或什么可以允许这个?
也许如果我让用户输入stty cbreak
或stty raw
在运行telnet之前,这可行吗?(仅限UNIX,我知道!)
如果我可以通过telnet来执行此操作,那么我将不得不为此功能编写一个特殊客户端...
我想知道是否可以通过telnet(或其他程序)建立与LDAP服务器的连接,并开始发出请求和接收响应,就像我通常使用HTTP一样.事实上,这个问题更通用,与我对网络连接和通信协议的误解有关.让我告诉你我对这个话题的看法:
所有应用程序协议都定义了通信协议(即服务器将理解并根据其传递进行操作的消息).如果我知道应用程序协议是如何工作的,我可以建立与服务器的连接(控制该协议服务器端的守护进程)并开始与服务器通信.例如,使用HTTP,我可以通过telnet建立与HTTP SERVER的连接,并开始与他通过此请求进行交谈,例如:
GET /users/pepito HTTP/1.1
Host: stackoverflow
Content-Type: text/html
Run Code Online (Sandbox Code Playgroud)
我希望这个程序能够在任何应用程序协议中发生.这个概念对吗?
我已经瞥见了LDAP协议规范RFC,但我不明白这些消息的格式.我的意思是,我期待阅读类似HTTP协议规范的内容; 但它太普通了.你能举个例子说明如何进行LDAP搜索吗?