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"); } } |
过滤脚本
最新推荐文章于 2023-02-25 11:52:43 发布