过滤脚本

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#!/usr/bin/perl -w
#
# grabsms.pl:从GSMTAP包中读出短信/彩信内容
# tombkeeper, 2013.06.01
#

# SMS相关协议字段说明:
# gsm_sms.tp-da:接收端号码,见于发出的sms包。
# gsm_sms.tp-oa:发送端号码,见于收到的sms包。
# mmse.from:发送端号码,见于彩信。彩信的gsm_sms.tp-oa是运营商的号码。
# mmse.content_location:内容的链接,见于彩信。
# 详见tshark -G fields | grep gsm_sms
my $cmdline = "tshark -r $ARGV[0] -R gsm_sms -Tfields -Eseparator=\\; " .
              "-e gsm_sms.tp-oa -e gsm_sms.tp-da -e mmse.from " .
              "-e mmse.content_location -e gsm_sms.sms_text 2>/dev/null";
my @smsinfo = `$cmdline`;

foreach(@smsinfo)
{
    chomp($_);
    # sms内容要放在最后,因为其中可能包含用于split的字符,造成干扰
    (my $tpoa, my $tpda, my $mmsfrom, my $mmsloc, my $sms) = split(";", $_, 5);
    if($tpoa) { print( "From: $tpoa\n" ); }
    if($tpda) { print( "To: $tpda\n" ); }
    if($sms)
    {
        $sms=~s/\\x([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg;
        # 用print而不是printf,避免sms内容中可能出现的%等特殊字符引发错误
        print("Message: $sms\n");
    }
    if($mmsfrom) { print( "MMSFrom: $mmsfrom\n" ); }
    if($mmsloc) { print( "MMSLocation: $mmsloc\n" ); }

    if($tpoa || $tpda || $mmsfrom) { print('-'x74 . "\n"); }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值