我必须通过telnet连接到远程服务器,并希望在那里发送文件输入.
这是一个处理器模拟器(MCF68k),因此我不能将文件scp到服务器并从那里运行.
我可以发送这样的输入:
telnet host.name < input.file
哪个会成功将数据传输到服务器并运行我想要的存储命令.但是,我需要telnet会话保持交互(不终止).
如何将文件传递给命令,然后将stdin的控制权返回给终端并保持交互式会话打开?
很晚编辑:
我认为这可以通过以下方式完成expect:
男人期待:http://www.manpagez.com/man/1/expect/
python包装器:http://www.noah.org/wiki/pexpect
我已经阅读了很多关于这个主题的内容,telnet是一个协议,不是简单的套接字连接,等待换行符,使用外部库等等......
最重要的是,我需要一个快速而脏的java telnet应用程序启动和运行,不一定可扩展,不一定漂亮,所以我试图避免使用库,系统函数调用等.我一直在尝试和测试,到目前为止,当我尝试登录路由器(当然通过telnet)时,我得到了......没有.
这是我到目前为止使用的代码的剪辑,请有人指出我正确的方向,因为我不知道还应该尝试什么,因为我确信它必须是非常简单和愚蠢的东西我失踪了.提前致谢!
Socket socket = new Socket("192.168.1.1", 23);
socket.setKeepAlive(true);
BufferedReader r = new BufferedReader(new InputStreamReader(socket.getInputStream()));
PrintWriter w = new PrintWriter(socket.getOutputStream(),true);
int c=0;
while ((c = r.read()) != -1)
System.out.print((char)c);
w.print("1234\r\n"); // also tried simply \n or \r
//w.flush();
//Thread.sleep(1000);
while ((c = r.read()) != -1)
System.out.print((char)c);
w.print("1234\r\n");
//Thread.sleep(1000);
while ((c = r.read()) != -1)
System.out.print((char)c);
socket.close();
Run Code Online (Sandbox Code Playgroud) 我正在阅读关于套接字的文章并找到了一个很好的练习:一个简单的聊天服务器回应输入.这似乎是一个常见的练习,我找到了几个例子,如chatserver5.py和一些SO问题.问题是我只能在使用时连接telnet localhost 51234而不能连接telnet 192.168.1.3 51234(其中192.168.1.3是我的"服务器"的网络IP).不用说,我无法从网络上的另一台机器连接.我得到以下输出:
Trying 192.168.1.3...
telnet: connect to address 192.168.1.3: Connection refused
telnet: Unable to connect to remote host
Run Code Online (Sandbox Code Playgroud)
这是我的代码:
import socket, threading
HOST = '127.0.0.1'
PORT = 51234
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((HOST, PORT))
s.listen(4)
clients = [] #list of clients connected
lock = threading.Lock()
class chatServer(threading.Thread):
def __init__(self, (socket,address)):
threading.Thread.__init__(self)
self.socket = socket
self.address= address
def run(self):
lock.acquire()
clients.append(self)
lock.release()
print '%s:%s connected.' % self.address
while True:
data …Run Code Online (Sandbox Code Playgroud) 这就是我想要做的:
web-browser - >通过telnet(server1)连接到远程服务器 - >通过端口80(server2)上的telnet连接到squid-proxy(需要身份验证)
我写了一个使用Twisted的小python脚本(这里:
#! /usr/bin/python
from twisted.internet import reactor, protocol
from twisted.web import http
from telnetlib import Telnet
import getpass
from sys import stdout
class datareceiver(protocol.Protocol):
def dataReceived(self,data):
self.telnet_con.write(data)
stdout.write( self.telnet_con.read_all() )
def connectionMade(data):
stdout.write("\nA connection was made to this server\n")
def main():
server1 = "10.1.1.1"
#user = raw_input("Enter your remote account: ")
password = getpass.getpass()
tn = Telnet(server1)
if password:
tn.read_until("Password: ")
tn.write(password + "\n")
#This is server2
tn.write("telnet 10.1.1.10 80 \n")
#serverfac = protocol.Factory() …Run Code Online (Sandbox Code Playgroud) 我有一个perl脚本,当有点蒸馏时,看起来像这样:
my $randport = int(10000 + rand(1000)); # Random port as other scripts like this run at the same time
my $localip = '192.168.100.' . ($port - 4000); # Don't ask... backwards compatibility
system("ssh -NL $randport:$localip:23 root\@$ip -o ConnectTimeout=60 -i somekey &"); # create the tunnel in the background
sleep 10; # Give the tunnel some time to come up
# Create the telnet object
my $telnet = new Net::Telnet(
Timeout => 10,
Host => 'localhost',
Port => $randport,
Telnetmode …Run Code Online (Sandbox Code Playgroud) 我想知道电子邮件地址是否有效.
我通过telnet telnet完成了这个,见下文
$ telnet mail.example.com 25
Trying 0.0.0.0...
Connected to mail.example.com.
Escape character is '^]'.
220 mail.example.com Mon, 14 Jan 2013 19:01:44 +0000
helo email.com
250 mail.example.com Hello email.com [0.0.0.0]
mail from:blake@email.com
250 OK
rcpt to:gfdgsdfhgsfd@example.com
550 Unknown user
Run Code Online (Sandbox Code Playgroud)
有了这550个请求,我知道该地址在邮件服务器上无效......如果它有效,我会得到如下的响应:
250 2.1.5 OK
Run Code Online (Sandbox Code Playgroud)
我如何在shell脚本中自动执行此操作?到目前为止,我有以下内容
#!/bin/bash
host=`dig mx +short $1 | cut -d ' ' -f2 | head -1`
telnet $host 25
Run Code Online (Sandbox Code Playgroud)
谢谢!
我想telnet到我的路由器,我想自动化它,所以我不必一直登录,因为我一天做几次.
除了VBS中的sendkeys之外还有其他方法吗?这是因为物理类型,所以telnet窗口需要是活动的,而且相当烦人.
我尝试了一个批处理文件,但结果却非常奇怪.这里是:
telnet 192.168.1.254
REM This is the router IP
ping 255.255.255.255 -n 1 -w 1000 > nul
REM This is to wait for the router if its being slow
George
REM This is the username, as it prompts as soon as it logs in
ping 255.255.255.255 -n 1 -w 1000 > nul
(the password)
ping 255.255.255.255 -n 1 -w 1000 > nul
system
REM Enters the system menu
ping 255.255.255.255 -n 1 -w 10 > nul
debug
REM …Run Code Online (Sandbox Code Playgroud) 当通过telnet执行的命令通过控制台继续响应时,是否可以逐行打印telnet响应?
示例:我已经执行了一个命令(收集日志),它继续在控制台窗口上显示日志.我们可以逐行读取响应并打印它,而不会遗漏任何单行吗?
在片段下面写入日志,但仅在特定时间之后.如果我在其间停止服务/脚本(CTRL-C),则不会写任何内容.
import sys
import telnetlib
import time
orig_stdout = sys.stdout
f = open('outpuy.txt', 'w')
sys.stdout = f
try:
tn = telnetlib.Telnet(IP)
tn.read_until(b"pattern1")
tn.write(username.encode('ascii') + b"\n")
tn.read_until(b"pattern2")
tn.write(command1.encode('ascii') + b"\n")
z = tn.read_until(b'abcd\b\n',600)
array = z.splitlines( )
except:
sys.exit("Telnet Failed to ", IP)
for i in array:
i=i.strip()
print(i)
sys.stdout = orig_stdout
f.close()
Run Code Online (Sandbox Code Playgroud) 我有一个难以理解的问题.
我正在尝试自动登录到路由器的CLI并运行通过网页获得的一些命令.但是我不知道路由器是否启用了telnet或SSH(可能是一个,另一个或两者),我有一个可能的用户名/密码组合列表,我需要尝试获取访问权限.
哦,我无法更改协议类型或设备上的凭据,因此这不是一个真正的选择.
我能够弄清楚如何使用已知的协议和登录凭据登录到路由器并运行必要的命令(包含在下面),但我不知道是否应该使用if/else块来处理telnet/ssh决定,或者如果switch语句可能更好?在PHP中使用Expect是一种更简单的方法吗?
function tunnelRun($commands,$user,$pass, $yubi){
$cpeIP = "1.2.3.4";
$commands_explode = explode("\n", $commands);
$screenOut = "";
$ssh = new Net_SSH2('router_jumphost');
if (!$ssh->login($user, $pass . $yubi)) {
exit('Login Failed');
}
$ssh->setTimeout(2);
$ssh->write("ssh -l username $cpeIP\n");
$ssh->read("assword:");
$ssh->write("password\n");
$ssh->read("#");
$ssh->write("\n");
$cpePrompt = $ssh->read('/.*[#|>]/', NET_SSH2_READ_REGEX);
$cpePrompt = str_replace("\n", '', trim($cpePrompt));
$ssh->write("config t\n");
foreach ($commands_explode as $i) {
$ssh->write("$i\n"); // note the "\n"
$ssh->setTimeout(2);
$screenOut .= $ssh->read();
}
$ssh->write("end\n");
$ssh->read($cpePrompt);
$ssh->write("exit\n");
echo "Router Update completed! Results below:<br><br>";
echo "<div id=\"text_out\"><textarea style=\" border:none; width: …Run Code Online (Sandbox Code Playgroud) 我正在使用杜鹃沙箱进行恶意软件分析。我有一个虚拟机虚拟机,其IP设置为192.168.56.101。开启虚拟机电源后,将有一个脚本agent.py侦听端口8000。网络是Virtualbox端的仅主机配置。仅主机适配器的IP设置为192.168.56.1
当VM处于开机状态时,
来宾(192.168.56.101)能够ping通主机(192.168.56.1)
主机(192.168.56.1)可以ping通来宾(192.168.56.101)。
Telnet适用于端口(8000)上的主机IP(192.168.56.101)。
当我尝试curl时,它会失败,并且会显示错误消息
错误:无法检索到所请求的网址。
但是,当我输入相同的IP和端口组合时,会收到成功消息,而不是错误消息。
我在大学网络中,因此需要使用代理。我认为代理是罪魁祸首,因此尝试通过在命令行上将其取消设置来禁用它,但没有成功。
这可能是什么原因?内部代理还是其他设置?发布屏幕截图以供参考。