是否有办法检查localhost是否正在与其他服务器建立ftp连接?
要求如下:本地主机 - > serverA的 远程服务器 - > serverB上。
需要检查serverA是否正在与serverB进行ftp连接。
因此,每当serverA与服务器B进行ftp连接时,如何获得通知。
我试过这样:ps -ef | grep -i ftp;但是由于ps进程也会得到通知,因此无法在shell脚本中使用,有没有更好的方法来检查serverA是否正在与serverB建立ftp连接,如果是,则通知/记录到文件。
由于
答案 0 :(得分:1)
你的问题“ps -ef | grep -i ftp”也报告'ps'过程是由grep搜索字符串“ftp”引起的。这也会影响很多其他进程,它们的命令行中也有“ftp”这个词。
如果您安装了procps工具“pgrep”和“pkill”,请修复该检查。它们对“grepping”进程和运行命令行非常有帮助。
要解决您的初始问题,您可以检查是否安装了'ss'(显示来自iproute2软件包的套接字)命令。
它的输出可能有用(11.22.33.44是你本地的IP 130.133.3.130遥控器):
root:sigkill:~/# ss -p|cat
State Recv-Q Send-Q Local Address:Port Peer Address:Port
[...]
ESTAB 0 0 11.22.33.44:43681 130.133.3.130:ftp users:(("ftp",19729,4),("ftp",19729,3))
[...]
答案 1 :(得分:0)
您可以采取以下几种方法:
ftp
的正在运行的进程。这不会捕获其他FTP客户端(如果你关心它),并且它不会捕获在民意调查之间滑动的非常短的ftp会话。ftp
的所有执行。同样,这不会捕获其他FTP客户端。iptables
规则将出站FTP连接与您关心的任何服务器进行匹配并记录日志他们使用LOG
目标)。无论客户端如何,这都会捕获所有连接,但是跟踪进程和用户会更复杂一些。答案 2 :(得分:0)
您可以使用$ grep ftp /etc/services
列出当前的ftp连接。
$ grep ftp /etc/services
ftp-data 20/tcp
ftp-data 20/udp
...
ftp 21/tcp
ftp 21/udp fsp fspd
...
sftp 115/tcp
sftp 115/udp
...
ftp-data 20/sctp # FTP
ftp 21/sctp # FTP
...
ftps-data 989/tcp # ftp protocol, data, over TLS/SSL
ftps-data 989/udp # ftp protocol, data, over TLS/SSL
ftps 990/tcp # ftp protocol, control, over TLS/SSL
ftps 990/udp # ftp protocol, control, over TLS/SSL
使用netstat查看打开的连接。例如,对于简单的FTP ...
$ netstat -tan | grep \:21
tcp 0 0 0.0.0.0:21 0.0.0.0:* LISTEN
tcp 0 0 :::21 :::* LISTEN