为了账号安全,请及时绑定邮箱和手机立即绑定

检查字符串是否匹配

检查字符串是否匹配

www说 2019-04-26 19:19:16
如何查看已记录IP地址的次数?我的想法是这样的192.168.1.254192.168.1.254192.168.1.254192.168.1.254192.168.1.25410.40.89.79对此192.168.1.254(5)10.40.89.79(1)syslog_2019-05-15.txt看起来像这样DROP IN = eth0 OUT = MAC = 38:2c:4a:cb:e2:40:10:e8:78:aa:89:ba:08:00 SRC = 92.53.90.242 DST = 90.149.222.18 LEN = 40 TOS = 0x00 PREC = 0x00 TTL = 243 ID = 37773 PROTO = TCP SPT = 59155 DPT = 1027 SEQ = 1687374236 ACK = 0 WINDOW = 1024 RES = 0x00 SYN URGP = 0 192.168.1.1 5月14日00:01:44 kern警告内核DROP IN = eth0 OUT = MAC = 38:2c:4a:cb:e2:40:10:e8:78:aa:89:ba:08:00 SRC = 185.216.140.6 DST = 90.149.222.18 LEN = 40 TOS = 0x00 PREC = 0x00 TTL = 248 ID = 54321 PROTO = TCP SPT = 5码:var fs = require('fs');fs.readFile('C:/Users/sondr/Desktop/koder/Ip_søk_syslog/syslog_2019-05-15.txt', 'utf8', function(err, data) {   if (err) throw err; {     //count     var count = 0;     //ReEX     const reg = /\bSRC=([\.0-9]+)\b/g;     while ((m = reg.exec(data))) {       console.log("SRC= " + m[1])       console.log(++count);     }     // DEBUG:     //console.log(data);   }});
查看完整描述

2 回答

?
函数式编程

TA贡献1807条经验 获得超9个赞

循环遍历IP地址并将地址保存为Object的键,如果遍历Object中已有的IP,则tracker可以获取其值并将其递增1或默认为1如果它不存在,因为它将是你第一次遇到那个IP。


const data = [

  '192.168.1.254', 

  '192.168.1.254',

  '192.168.1.254', 

  '192.168.1.254', 

  '192.168.1.254',

  '10.40.89.79'

]


const tracker = {}


data.forEach(d => {

  const count = d in tracker ? ++tracker[d] : 1

  tracker[d] = count

})


Object.keys(tracker).forEach(k => console.log(`${k} (${tracker[k]})`))


查看完整回答
反对 回复 2019-05-17
?
猛跑小猪

TA贡献1858条经验 获得超8个赞

如果我理解正确,你想从字符串中获取所有ip-adresses然后将它们堆叠(删除重复项)。所以这个正则表达式:


^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$


可以检查IP地址。现在使用replace方法,我们可以获得所有的正则表达式匹配。然后我们可以遍历它们并删除重复项。看看这段代码:


var str = something;

var IPs = [];

str.replace(

    /^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$/gi,

    function(match) {

        IPs[IPs.length] = match;

        return match;

    }

);

var stackedIPs = {};

for (i = 0; i < IPs.length; i++) {

    if (stackedIPs[IPs[i]] == null) {

        stackedIPs[IPs[i]] = 1;

    } else {

        stackedIPs[IPs[i]] = stackedIPs[IPs[i]] + 1;

    }

}

StackedIPs将为您提供如下所示的对象:


{

    192.168.1.1: 3,

    192.168.1.5: 2,

    ...

}

分配给每个IP地址的号码是找到它的次数。


查看完整回答
反对 回复 2019-05-17
  • 2 回答
  • 0 关注
  • 630 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号