Как стать автором
Обновить

Комментарии 4

По утверждению 2ip адреса подсети 77.72.82.0/24 розданы бритам
Для геолокации использовал www.npmjs.com/package/geoip-local в нём могут быть неполные/неактуальные данные, тк. юзается бесплатна база.
Вам лучше взять www.npmjs.com/package/maxmind и накидать простой postinstall скрипт, который будет скачивать geolite.maxmind.com/download/geoip/database/GeoLite2-City.tar.gz и распаковывать в рабочую директорию. Тогда у вас будет всегда актуальная локальная GeoIP база данных.
Спасибо за статью! Использую ваш код как отправную точку для своего эксперимента. Смутила вот эта строчка:

lines[ 0 ] = lines[ 0 ] + lastTcpLine;

вроде должно быть наоборот:

lines[ 0 ] = lastTcpLine + lines[ 0 ];

Так же ни в одной строчке не будет \n после split('\n'), так что можно не проверять:

if( lines[ lastTcpLineNum ].indexOf('\n') == -1 )

В итоге пришел к такому варианту (как раз последняя строка в массиве будет пустой, если весь кусок данных оканчивается \n):


let lastTcpLine = '';
tcpdump.stdout.on('data', data=>{
    let lines = `${lastTcpLine}${data}`.split('\n');
    lastTcpLine = lines.pop();
    lines.map(line=>console.log(line));
});

Еще заметил, что такой spawn копит данные по 4-8Кб, что мне не подходит, потому что я хочу сразу увидеть пакет. поэтому переписал spawn по примеру stackoverflow.com/a/27360991/1276731 на:

spawn('stdbuf', ['-oL', '-eL', 'tcpdump', '-n'])

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории