RSH的网络通信细节
rsh
服務偵聽
514/TCP
口,
client
建立到
server
的
514/TCP
的連接。服務端會先檢查
TCP
連接的源端口是否位于
[512,1023]
區間,否則服務端進程終止。
*nix
最早要求范圍是
[1,1023]
,后來為消除一些安全隱患,改成
[512,1023]
。但這是實現相關的,并且各個
系統
的
man
手冊可能與其當前實現不同步,某些版本
Solaris
的
man
手冊就有問題,應實測。 
為什么
rshd
有這個限制?一般
rsh
、
rcp
、
rlogin
被
設置
成
setuid-to-root
,
client
要想訪問遠端
rshd
,只能用系統自帶的
rsh
、
rcp
、
rlogin
,但這三個程序會如實指定
client_user
字段,不存在偽造的可能。只有
root
用戶才能使用
[1,1023]
的端口。
那么
rshd
如何檢查端口?
client
向
server
發送如下請求數據
: 
[port]\0<client_user>\0<server_user>\0<command>\0
Port ---- ANSI
字符串形式的端口號,不是短整型形式的端口號。
client_user ---- 
客戶端當前用戶名
server_user ---- 
試圖遠程使用的服務端用戶名
command ---- 
試圖遠程使用的服務端命令 
port
本身是可選項。如果指定了
port
,服務端會建立到客戶端這個端口
(port)
的
TCP
連接,
rshd
會將
stderr
重定向到這條連接上。
*nix
要求
port
在
[1,1023]
上,并且成功建立連接,否則服務端進程終止。但這是實現相關的,
Solaris
、
Linux
自帶
rsh
命令,抓包表明它們都提供
port
字段,并且沒有命令行開關改變這個行為。 
server
向
client
發送如下響應數據
: 
<ret><data>
ret
等于
0x00
表示成功,
data
對應執行結果,一般是
\n
分隔、結尾的文本。
ret
等于
0x01
表示失敗,
data
對應錯誤信息,一般也是
\n
分隔、結尾的文本。
Application reaches max limit on rsh
connections
It appears from the customer's application
that it is reaching the max limit (and even going beyond) on the max allowed
number of port connections when doing repeated rsh to the server's
in.rshd,- 
which allows connections only
from the "ephemeral" reserved ports (ports 512-1023). 
Many Error Messages of the kind below
appear in /var/adm/messages for 5-10 minutes, and, after which connections
start to work again. 
Customer is getting
these error messages at peak load times.
His ultra is a ftp/rsh/rcp server for many differnt remote client
machines. 
Error msg
example: (/var/log/messages) 
"Apr
1 11:07:10 asncomm rsh[16295]: can't get stderr port: Resource
temporarily unavailable" 
The message isn't from xinetd throttling
too high of a connection rate. It is from rshd, due to a failure of rresvport.
Note that the EAGAIN associated error message translation is documented on the
manpage for rresvport: 
 
“The rresvport() function returns a valid,
bound socket descriptor on success. 
It
returns -1 on error with the global value errno set according to the reason for
failure. 
The error code EAGAIN is
overloaded to mean ''All network ports in use.''
參考:
rsh的網絡通信細節
http://www.netexpert.cn/thread-3717-1-1.html
 
作者:zhenjing.chen
 
出處:http://www.cnblogs.com/zhenjing/
未注明轉載的文章,版權歸作者所有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利。
總結
以上是生活随笔為你收集整理的RSH的网络通信细节的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: Python协程之asyncio
- 下一篇: ubuntu16.04循环登陆与NVID
