检查本地主机是否正在建立ftp连接



是否有办法检查本地主机是否正在与其他服务器进行ftp连接?

需求是这样的:本地主机-> serverA远程服务器--> serverB.

需要检查serverA是否与serververb建立ftp连接。

所以当serverA与serverB建立ftp连接时,如何得到通知。

我试过了:ps -ef | grep -i ftp;然而,由于ps进程也会收到通知,所以不能在shell脚本中使用这个,有没有更好的方法来检查serverA是否正在与serverB建立ftp连接,如果是,得到通知/记录到一个文件。

谢谢

你的问题"ps -ef | grep -i ftp"也报告了'ps'进程是由grep搜索字符串"ftp"导致的。这也会影响到许多其他命令行中也有"ftp"这个词的进程。

要解决这个问题,请检查是否安装了procps工具"pgrep"one_answers"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))
[...]

您可以采用以下几种方法:

  • 您可以为ftp轮询正在运行的进程。这不会捕获其他FTP客户端(如果您关心的话),也不会捕获轮询之间滑动的非常短的FTP会话。
  • 如果您的系统支持执行日志,您可以记录ftp的所有执行。同样,这不会捕获其他FTP客户机。
  • 您可以使用系统提供的某些机制监视端口21/tcp上的出站连接(例如,在Linux上,使用iptables规则匹配到您关心的任何服务器的出站FTP连接,并使用LOG目标记录它们)。这将捕获所有连接,而不管客户端是什么,但是跟踪过程和用户会有点复杂。

可以使用$ 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

最新更新