sug*_*nan 10 linux ksh shell-script telnet
我正在尝试执行 telnet 命令并将输出放在 shell 脚本上。但是当端口没有打开或ip不存在时。该命令花费太多时间来给出响应。是否可以限制 telnet 上的最大尝试时间?
telnet host port
Run Code Online (Sandbox Code Playgroud)
小智 10
这将运行不超过 2 秒:
[]# echo quit | timeout --signal=9 2 telnet [SERVER] [PORT]
Run Code Online (Sandbox Code Playgroud)
Nam*_* VU 10
您可以考虑使用更简洁的命令 netcat ,如此处nc
讨论的
echo 'QUIT' | nc -w SECONDS YOUR_HOST PORT; echo $?
Run Code Online (Sandbox Code Playgroud)
您必须运行 telnet 吗?我认为超时(1)会对你有所帮助。
替代方案#1: 使用超时,它是 GNU coreutils 的一部分。这不会确认您是否能够建立连接。
TIMEOUT=10 timeout $TIMEOUT telnet <host> <port>
替代方案#2: 使用 Bash/Perl/Python 来解决相同的问题,或多或少的粒度。
举几个例子:
重击: TIMEOUT=10; telnet <host> <port> 2>&1 >/dev/null & WPID=$!; sleep $TIMEOUT && kill $! & KPID=$!; wait $WPID
珀尔:perl -e "alarm 10; exec @ARGV" "telnet my.server.com 23"
Python: python -c 'import telnetlib;HOST="my.server.com"; PORT=23; TIMEOUT=10; PATTERN="Login: "; t = telnetlib.Telnet (HOST, PORT); t_read = t.read_until(PATTERN, TIMEOUT); print(repr(t_read))'
小智 3
如果编写脚本,您可以在后台运行 telnet,然后如果它在延迟后仍在运行,您可以将其终止。例子:
{ printf "HEAD /\n\n"; sleep 1; } | telnet hostname port & sleep 2 && kill %1 2>/dev/null && echo "timeout"
Run Code Online (Sandbox Code Playgroud)
这将等待 2 秒,然后终止后台 telnet。
归档时间: |
|
查看次数: |
45633 次 |
最近记录: |