免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2468 | 回复: 6
打印 上一主题 下一主题

perl 转换文本求助 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-12-13 17:15 |只看该作者 |倒序浏览
有如下文本:
tcp/1-65535:7709
tcp/1-65535:7710
tcp/1-65535:7741
tcp/1-65535:7001
tcp/1-65535:7456
tcp/29:53
tcp/7752:53
tcp/4561:53
tcp/20:21
udp/54:52
......
转换成iptables,冒号前为源端口,冒号后为目的端口,实现iptables的多端口匹配,如:
-p tcp -m multiport --sports 1:65535 --dports 7709,7710,7741,7001,7456
-p udp -m multiport --sports 29,7752,4561 --dports 53
-p tcp --sport 20 --dport 21
-p udp --sport 54 --dport 52

论坛徽章:
0
2 [报告]
发表于 2010-12-13 17:31 |只看该作者
{:3_184:} 这个实现起来不复杂了。

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
3 [报告]
发表于 2010-12-13 17:36 |只看该作者
老湿,你这个没规律啊

论坛徽章:
0
4 [报告]
发表于 2010-12-13 18:08 |只看该作者
老湿,你这个没规律啊
昭襄王 发表于 2010-12-13 17:36



    有规律啊,相同源端口或者目的端口的结合在一起。

论坛徽章:
0
5 [报告]
发表于 2010-12-13 19:31 |只看该作者
有规律啊,相同源端口或者目的端口的结合在一起。
neten 发表于 2010-12-13 18:08



     有点模糊,结合成什么样,具体下,举个例子先。

论坛徽章:
0
6 [报告]
发表于 2010-12-14 20:59 |只看该作者
多具点例子。

论坛徽章:
0
7 [报告]
发表于 2010-12-15 00:18 |只看该作者
应该可以,就是变量名称起的有点乱~
  1. my %hash;
  2. my %rhash;

  3. open IN,"<source.txt";

  4. while (<IN>) {
  5. chomp;
  6. if (/^(\w{3})\/(\S+):(\d+)$/){
  7. push @{$hash{$1}{$2}},$3;
  8. push @{$rhash{$1}{$3}},$2;
  9. }
  10. }

  11. close IN;

  12. foreach my $k (keys %rhash){
  13. foreach my $k1 (keys %{$rhash{$k}}) {
  14. delete $rhash{$k}{$k1} if @{$rhash{$k}{$k1}}==1;
  15. }
  16. }

  17. foreach my $kk (keys %hash){
  18. foreach my $kk1 (keys %{$hash{$kk}}) {
  19. foreach my $kk2 (keys %{$rhash{$kk}}) {
  20. delete $hash{$kk}{$kk1} if @{$hash{$kk}{$kk1}}==1 and $hash{$kk}{$kk1}->[0] eq $kk2;
  21. }
  22. }
  23. }

  24. foreach my $pkk (keys %hash){
  25. foreach my $pkk1 (keys %{$hash{$pkk}}) {
  26. if (@{$hash{$pkk}{$pkk1}} >1){
  27. printf "-p %s -m multiport --sports %s --dports %s\n",$pkk,$pkk1,join ",",@{$hash{$pkk}{$pkk1}};
  28. } else {
  29. printf "-p %s --sport %s --dport %s\n",$pkk,$pkk1,$hash{$pkk}{$pkk1}->[0];
  30. }
  31. }
  32. }

  33. foreach my $rkk (keys %rhash){
  34. foreach my $rkk1 (keys %{$rhash{$rkk}}) {
  35. printf "-p %s -m multiport --sports %s --dports %s\n",$rkk,(join ",",@{$rhash{$rkk}{$rkk1}}),$rkk1;
  36. }
  37. }
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP