[nodeJS] Packet Sniffer_TCP data packet 감시 by JD



  • nodeJS를 운영체제에 맞게 설치
  • app.js가 위치한 폴더에 npm을 이용해 cap 모듈 설치 ( npm install cap )
  • cap 모듈 설치 전 윈도우 경우 WinPcap 설치가 필요하며 리눅스 계열은 libcap-dev 설치가 필요
[app.js]

var Cap = require('cap').Cap,
    decoders = require('cap').decoders,
    PROTOCOL = decoders.PROTOCOL;
 
var c = new Cap(),
    device = Cap.findDevice('127.0.0.1'), // Packet Data를 감시할 기기 IP
    filter = 'tcp and dst port 8080',        // Packet Data를 감시할 기기 IP port
    bufSize = 10 * 1024 * 1024,
    buffer = new Buffer(65535);

var linkType = c.open(device, filter, bufSize, buffer);
 
c.setMinBytes && c.setMinBytes(0);
 
c.on('packet', function(nbytes, trunc) {
  console.log('packet: length ' + nbytes + ' bytes, truncated? '
              + (trunc ? 'yes' : 'no'));
 
  // raw packet data === buffer.slice(0, nbytes) 
 
  if (linkType === 'ETHERNET') {
    var ret = decoders.Ethernet(buffer);
 
    if (ret.info.type === PROTOCOL.ETHERNET.IPV4) {
      console.log('Decoding IPv4 ...');
 
      ret = decoders.IPV4(buffer, ret.offset);
      console.log('from: ' + ret.info.srcaddr + ' to ' + ret.info.dstaddr);
 
      if (ret.info.protocol === PROTOCOL.IP.TCP) {
        var datalen = ret.info.totallen - ret.hdrlen;
 
        console.log('Decoding TCP ...');
 
        ret = decoders.TCP(buffer, ret.offset);
        console.log(' from port: ' + ret.info.srcport + ' to port: ' + ret.info.dstport);
        datalen -= ret.hdrlen;
        var dataStr = buffer.toString('binary', ret.offset, ret.offset + datalen);
        console.log('!!!!!!!!: '+dataStr);
 } else if (ret.info.protocol === PROTOCOL.IP.UDP) {
        console.log('Decoding UDP ...');
 
        ret = decoders.UDP(buffer, ret.offset);
        console.log(' from port: ' + ret.info.srcport + ' to port: ' + ret.info.dstport);
        console.log('!!!!!:'+buffer.toString('binary', ret.offset, ret.offset + ret.info.length)+'*********');
      } else
        console.log('Unsupported IPv4 protocol: ' + PROTOCOL.IP[ret.info.protocol]);
    } else
      console.log('Unsupported Ethertype: ' + PROTOCOL.ETHERNET[ret.info.type]);
  }
});


덧글

  • 2015/07/24 15:13 # 삭제 답글 비공개

    비공개 덧글입니다.
  • JD 2015/07/26 01:19 #

    무료입니다.
    리눅스 모듈 패키지를 설치 할때 apt get 사용하듯이
    nodeJS 설치 후 npm을 이용해 설치해서 사용 하시면 됩니다.
댓글 입력 영역


통계 위젯 (화이트)

12
26
30319