ss 过滤或者指定过滤

常用选项示例

[root@CentOS7.3 ~]#ss -an               #列出所有的sockets连接。   
[root@CentOS7.3 ~]#ss -tnl              #列出和tcp相关的sockets连接。
[root@CentOS7.3 ~]#ss -unl              #列出和udp相关的sockets连接。

匹配过滤本机ip地址和端口

[root@centos7.3 ~]#ss src :22               #匹配本机端口为22的连接
Netid State      Recv-Q Send-Q  Local Address:Port                   Peer Address:Port                
tcp   ESTAB      0      0      192.168.xxx.xxx:ssh                   192.168.166.1:63892                
tcp   ESTAB      0      52     192.168.xxx.xxx:ssh                   192.168.166.1:63076  
[root@centos7.3 ~]#ss src :ssh              #匹配所有ssh协议的连接
Netid State      Recv-Q Send-Q  Local Address:Port                   Peer Address:Port                
tcp   ESTAB      0      0      192.168.166.137:ssh                   192.168.166.1:63892                
tcp   ESTAB      0      52     192.168.166.137:ssh                   192.168.166.1:63076                
[root@centos7.4-1 ~]#ss src 192.168.1.2:ssh     #匹配单个IP地址的ssh协议连接
Netid State      Recv-Q Send-Q  Local Address:Port                   Peer Address:Port                
tcp   ESTAB      0      0      192.168.166.137:ssh                   192.168.166.1:63892                
tcp   ESTAB      0      52     192.168.166.137:ssh                   192.168.166.1:63076                

匹配过滤远程ip地址和端口

[root@centos7.4-1 ~]#ss dst 119.75.213.61           #匹配单个远程IP的所有连接
Netid State      Recv-Q Send-Q  Local Address:Port                   Peer Address:Port                
tcp   ESTAB      0      0        192.168.0.25:59484                 119.75.213.61:http                 
[root@centos7.4-1 ~]#ss dst 119.75.213.61:80        #只匹配单个IP地址的80端口
Netid State      Recv-Q Send-Q  Local Address:Port                   Peer Address:Port                
tcp   ESTAB      0      0        192.168.0.25:59484                 119.75.213.61:http                 

将本地或者远程端口和一个数比较

[root@centos7.3 ~]# ss  sport = :http 
[root@centos7.3 ~]# ss  dport = :http 
[root@centos7.3 ~]# ss  dport \> :1024 
[root@centos7.3 ~]# ss  sport \> :1024 
[root@centos7.3 ~]# ss sport \< :32000 
[root@centos7.3 ~]# ss  sport eq :22 
[root@centos7.3 ~]# ss  dport != :22 

使用state 过滤sockets信息

显示所有状态为established的http连接

[root@CentOS7.3 ~]#ss -o state established '( dport = :smtp or sport = :http )' 
Netid Recv-Q Send-Q       Local Address:Port                        Peer Address:Port 

显示处于 FIN-WAIT-1状态的源端口为 80或者 443,目标网络为 192.168.1/24所有 tcp套接字

ss -o state fin-wait-1 '( sport = :http or sport = :https )' dst 192.168.1/24

使用tcp连接的状态进行过滤

ss -4 state FILTER-NAME-HERE
ss -6 state FILTER-NAME-HERE

FILTER-NAME-HERE 可用状态:

established
syn-sent
syn-recv
fin-wait-1
fin-wait-2
time-wait
closed
close-wait
last-ack
closing
all             #所有以上状态。
connected       #除了listen and closed的所有状态。
synchronized    #所有已连接的状态除了syn-sent。
bucket          #显示状态为maintained as minisockets,如:time-wait和syn-recv。
big             #和bucket相反。
[root@CentOS7.3 ~]#ss -4 state closed
Netid Recv-Q Send-Q       Local Address:Port                        Peer Address:Port                
udp   0      0                        *:mdns                                   *:*                    
udp   0      0                        *:25506                                  *:*                    
udp   0      0            192.168.xxx.1:domain                                 *:*                    
udp   0      0                 *%virbr0:bootps                                 *:*                    
udp   0      0                        *:bootpc                                 *:*                    
udp   0      0                        *:53379                                  *:*  

 

<think>好的,用户现在想用Apache POI实现Excel中指定列的自动过滤功能。我需要回忆一下POI的相关API,特别是关于自动过滤的部分。记得在POI中,可以通过Sheet的setAutoFilter方法来设置自动过滤的范围。首先,用户提到的自动过滤,应该是指Excel的自动筛选功能,也就是用户点击列头后可以筛选数据。POI中实现这个需要指定一个区域,通常这个区域包括标题行和数据行,然后调用setAutoFilter方法。比如,设置从第一行第一列到第五行第三列的区域作为筛选范围。 然后,用户可能需要示例代码。我需要确保代码中正确创建Workbook、Sheet,添加数据,然后设置自动过滤。要注意的是,自动过滤的区域应该包含标题行和数据区域,比如从A1到C5这样的范围。使用CellRangeAddress来定义这个区域,然后调用sheet.setAutoFilter(range)。 接下来,检查是否有常见问题需要提醒用户。比如,区域是否正确包含标题和数据,是否在生成文件后需要手动点击筛选按钮(因为POI可能只是设置区域,但不会自动应用筛选状态)。此外,不同版本的POI是否有差异,比如旧版本可能需要不同的方法。还要考虑用户是否可能遇到的其他问题,比如多列筛选,或者动态数据范围的处理。是否需要使用公式或者其他方法来动态设置筛选区域?不过用户的问题比较基础,可能只需要基本的设置。另外,参考之前用户的问题,他们之前遇到条件格式不生效的情况,可能是因为范围设置错误或者样式未正确附加。所以这里同样需要确保自动过滤的区域设置正确,没有行列颠倒的情况。 最后,生成示例代码时,要包含完整的步骤,从创建Workbook到写入文件,确保用户可以直接运行。同时,可能需要指出在Excel打开后,用户需要手动启用筛选,因为POI设置的是结构,而非状态。</think>### Apache POI实现Excel指定列自动过滤的解决方案 通过`Sheet.setAutoFilter`方法配合`CellRangeAddress`可实现指定列的自动过滤功能。以下是关键实现步骤和示例代码: --- #### 一、核心实现代码 ```java import org.apache.poi.ss.usermodel.*; import org.apache.poi.ss.util.CellRangeAddress; import org.apache.poi.xssf.usermodel.XSSFWorkbook; public class AutoFilterExample { public static void main(String[] args) throws Exception { try (Workbook workbook = new XSSFWorkbook()) { Sheet sheet = workbook.createSheet("Data"); // 创建标题行 Row headerRow = sheet.createRow(0); headerRow.createCell(0).setCellValue("姓名"); headerRow.createCell(1).setCellValue("年龄"); headerRow.createCell(2).setCellValue("部门"); // 创建数据行 for(int i=1; i<5; i++){ Row row = sheet.createRow(i); row.createCell(0).setCellValue("员工" + i); row.createCell(1).setCellValue(20 + i); row.createCell(2).setCellValue("部门" + (i%2 +1)); } // 设置自动过滤范围(包含标题行和数据行) CellRangeAddress range = new CellRangeAddress( 0, // 起始行(标题行) 4, // 结束行(最后一行数据) 0, // 起始列(姓名列) 2 // 结束列(部门列) ); sheet.setAutoFilter(range); // 关键API调用[^2] // 保存文件 try (FileOutputStream fos = new FileOutputStream("filtered.xlsx")) { workbook.write(fos); } } } } ``` --- #### 二、实现原理 1. **过滤区域定义** - 通过`CellRangeAddress`定义过滤范围时需满足: $$ \text{有效范围} = [\text{标题行}, \text{数据结束行}] \times [\text{起始列}, \text{结束列}] $$ - 示例中的范围覆盖A1到C5单元格,包含3列标题和4行数据 2. **过滤功能触发** - Excel打开文件后需手动点击标题栏的过滤按钮激活功能 - POI仅设置过滤区域结构,不改变实际筛选状态[^3] --- #### 三、常见问题排查 1. **过滤按钮未显示** - 检查是否包含标题行(必须作为范围的第一行) - 验证`CellRangeAddress`的列索引是否正确(0-based) 2. **多列过滤失效** - 确保范围包含所有需要过滤的列 - 示例中`(0,2)`表示覆盖第1到第3列 3. **动态数据范围处理** ```java // 动态计算数据结束行 int lastRowNum = sheet.getLastRowNum(); CellRangeAddress dynamicRange = new CellRangeAddress(0, lastRowNum, 0, 2); ``` --- #### 四、扩展应用 1. **结合条件格式** ```java // 在设置过滤后添加条件格式 SheetConditionalFormatting scf = sheet.getSheetConditionalFormatting(); ConditionalFormattingRule rule = scf.createConditionalFormattingRule("$B1>22"); PatternFormatting fill = rule.createPatternFormatting(); fill.setFillBackgroundColor(IndexedColors.YELLOW.index); scf.addConditionalFormatting(range, rule); // 复用同一范围[^1] ``` 2. **多区域过滤** ```java // 设置多个不连续列的过滤 sheet.setAutoFilter(new CellRangeAddress(0,4,0,0)); // 姓名列 sheet.setAutoFilter(new CellRangeAddress(0,4,2,2)); // 部门列 ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值