UDP header serialization object stream.
varUdpStream=require('udp-stream');varIpStream=require('ip-stream');varEtherStream=require('ether-stream');varPcapStream=require('pcap-stream');varpstream=newPcapStream(PCAP_FILE);varestream=newEtherStream();varipstream=newIpStream();varustream=newUdpStream();pstream.pipe(estream).pipe(ipstream).pipe(ustream);upstream.on('readable',function(){varmsg=upstream.read();msg.ether.src==='12:34:56:65:43:21';// Ethernet frame is still availablemsg.ip.src==='1.1.1.1';// IP header is still availablemsg.ip.dst==='2.2.2.2';msg.ip.protocol==='udp';msg.udp.srcPort===5321;// UDP header is available at .udp propertymsg.udo.dstPort===52;varpayload=msg.data;// UDP data is available at .data property});// Packets that cannot be parsed as UDP are emitted with 'ignored' eventupstream.on('ignored',function(msg){console.log('Ignored message ['+msg+']');});upstream.read(0);varUdpStream=require('udp-stream');varIpStream=require('ip-stream');varEtherStream=require('ether-stream');varUdpHeader=require('udp-header');varIpHeader=require('ip-header');varEtherFrame=require('ether-frame');varestream=newEtherStream();varipstream=newIpStream();varustream=newUdpStream();estream.pipe(ipstream).pipe(ustream);// define the header fields to write out to the buffervarinput={ether: newEtherFrame({dst: '01:02:03:04:05:06'}),ip: newIpHeader({dst: '1.2.3.4'}),udp: newUdpHeader({dstPort: 52,dataLength: 500}),data: newBuffer(8*1024)// space to write header to};// NOTE: packet payload is not in.data, that must be appended laterestream.write(input);varout=ustream.read();// header values have been written to the bufferout.offset===(input.ether.length*input.ip.length+input.udp.length);test.deepEqual(input.ether,newEtherFrame(out.data,0));test.deepEqual(input.ip,newIpHeader(out.data,input.ether.length));test.deepEqual(input.udp,newUdpHeader(out.data,input.ether.length+input.ip.length));// UDP checksums will only be calculated if the message contains both// the 'ip' header property and the UDP payload. By default the// payload is assumed to be in the 'suffix' property.input.suffix=newBuffer(500);// The location of the UDP payload can be configured.ustream2=newUdpStream({payload: 'udpPayload'});input.udpPayload=newBuffer(500);