Shell脚本—找出与特定IP地址建立连接的所有进程

目录

1. 完整脚本

2. 脚本详解

2.1 ​​Shebang和IP地址占位符​​

2.2 提取目标IP地址​​

2.3 输出表头​​

2.4 核心处理管道:查找关联进程的PID​​

2.5 循环处理每个PID并获取可执行文件路径​​


1. 完整脚本

#!/bin/bash
#IP

ip=$(sed -n '2s/^.//p' "$0")

echo -e "PID\tPATH"
netstat -antlp | grep ESTABLISHED | grep $ip | awk '{print $7}' | grep -o '^[0-9]*' | sort -u | while read pid; do
    exe_path=$(readlink -f /proc/$pid/exe)
    if [ -n "$exe_path" ]; then
        echo -e "${pid}\t${exe_path}"
    fi
done

备注:脚本第二行IP替换为需要分析的真实IP,例如第二行为

#88.88.88.88

2. 脚本详解

2.1 ​​Shebang和IP地址占位符​

  • #!/bin/bash:指定脚本使用Bash shell解释器执行。
  • #IP:这是脚本的第二行,也是一个注释行。它作为一个​​占位符​​,意图是让用户将#IP替换为需要监控的实际IP地址(例如#192.168.1.100)。脚本后续的sed命令将从这一行提取IP。

2.2 提取目标IP地址​

  • ip=$(sed -n '2s/^.//p' "$0"):这一行使用sed命令从脚本自身("$0"代表当前脚本文件名)的第二行提取IP地址。
    • -n选项取消默认输出,只显示处理后的行。
    • 2s/^.//p是一个替换命令:2表示只处理第二行,s/^.//表示删除行首的一个字符(^.匹配行首的第一个字符),p表示打印处理后的行。
    • ​操作示例​​:假设脚本第二行为#192.168.1.100sed会删除开头的#(一个字符),得到192.168.1.100并赋值给变量ip。但在当前脚本中,第二行是#IP,执行后ip变量的值将是IP,这会导致后续过滤失效。因此,用户必须手动修改第二行为有效的IP地址(例如#192.168.1.100)。

2.3 输出表头​

  • echo -e "PID\tPATH":使用-e选项启用转义字符,\t代表制表符。这行代码输出格式化的表头"PID"和"PATH",为后续结果提供列标题。

2.4 核心处理管道:查找关联进程的PID​

整个管道命令netstat -antlp | grep ESTABLISHED | grep $ip | awk '{print $7}' | grep -o '^[0-9]*' | sort -u逐步处理网络连接信息:

  • netstat -antlp:列出所有网络连接信息。
  • -a显示所有连接和监听端口。
  • -n以数字形式显示地址和端口,避免DNS解析。
  • -t仅显示TCP连接。
  • -p显示占用端口的进程ID和程序名(通常需要root权限)。
  • grep ESTABLISHED:从netstat结果中筛选出状态为"ESTABLISHED"(已建立)的连接行。
  • grep $ip:进一步筛选出与变量ip(即从脚本第二行提取的IP)相关的连接行。
  • awk '{print $7}'awk命令按空格或制表符分隔每一行,并打印第7个字段。在netstat -antlp的输出中,第7字段的格式通常为PID/程序名(例如3845/ssh)。
  • grep -o '^[0-9]*'-o选项只输出匹配到的部分。^[0-9]*正则表达式匹配行首的数字序列。这一步从PID/程序名中提取出纯数字的PID。
  • sort -u:对提取出的所有PID进行排序并去重(-u选项),确保每个PID只出现一次。

2.5 循环处理每个PID并获取可执行文件路径​

  • while read pid; do ... done:循环读取上一步管道输出的每一个PID。
  • exe_path=$(readlink -f /proc/$pid/exe):获取进程可执行文件的真实路径。
  • 在Linux系统中,/proc/$pid/exe是一个指向该进程所执行程序的符号链接。
  • readlink -f命令递归地跟随符号链接,解析出最终的绝对路径。-f选项确保即使路径中有多层符号链接也能得到正确目标。
  • if [ -n "$exe_path" ]; then:判断变量exe_path是否非空(-n)。这是一个安全检查,确保该PID对应的进程确实存在且其路径可读。
  • echo -e "${pid}\t${exe_path}":如果路径有效,则以制表符分隔的形式输出PID和完整的可执行文件路径,与表头对应。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值