Package io.netty.handler.pcap
Class PcapWriteHandler
- java.lang.Object
-
- io.netty.channel.ChannelHandlerAdapter
-
- io.netty.channel.ChannelInboundHandlerAdapter
-
- io.netty.channel.ChannelDuplexHandler
-
- io.netty.handler.pcap.PcapWriteHandler
-
- All Implemented Interfaces:
ChannelHandler,ChannelInboundHandler,ChannelOutboundHandler,java.io.Closeable,java.lang.AutoCloseable
public final class PcapWriteHandler extends ChannelDuplexHandler implements java.io.Closeable
PcapWriteHandlercapturesByteBuffromSocketChannel/ServerChannelorDatagramPacketand writes it into PcapOutputStream.Things to keep in mind when using
PcapWriteHandlerwith TCP:- Whenever
ChannelInboundHandlerAdapter.channelActive(ChannelHandlerContext)is called, a fake TCP 3-way handshake (SYN, SYN+ACK, ACK) is simulated as new connection in Pcap. - Whenever
ChannelHandlerAdapter.handlerRemoved(ChannelHandlerContext)is called, a fake TCP 3-way handshake (FIN+ACK, FIN+ACK, ACK) is simulated as connection shutdown in Pcap. - Whenever
ChannelInboundHandlerAdapter.exceptionCaught(ChannelHandlerContext, Throwable)is called, a fake TCP RST is sent to simulate connection Reset in Pcap. - ACK is sent each time data is send / received.
- Zero Length Data Packets can cause TCP Double ACK error in Wireshark. To tackle this,
set
captureZeroBytetofalse.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static classPcapWriteHandler.BuilderBuilder forPcapWriteHandler-
Nested classes/interfaces inherited from interface io.netty.channel.ChannelHandler
ChannelHandler.Sharable
-
-
Constructor Summary
Constructors Constructor Description PcapWriteHandler(java.io.OutputStream outputStream)Deprecated.UsePcapWriteHandler.Builderinstead.PcapWriteHandler(java.io.OutputStream outputStream, boolean captureZeroByte, boolean writePcapGlobalHeader)Deprecated.UsePcapWriteHandler.Builderinstead.
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description static PcapWriteHandler.Builderbuilder()voidchannelActive(ChannelHandlerContext ctx)CallsChannelHandlerContext.fireChannelActive()to forward to the nextChannelInboundHandlerin theChannelPipeline.voidchannelRead(ChannelHandlerContext ctx, java.lang.Object msg)CallsChannelHandlerContext.fireChannelRead(Object)to forward to the nextChannelInboundHandlerin theChannelPipeline.voidclose()ClosePcapWriterandOutputStream.voidexceptionCaught(ChannelHandlerContext ctx, java.lang.Throwable cause)CallsChannelHandlerContext.fireExceptionCaught(Throwable)to forward to the nextChannelHandlerin theChannelPipeline.voidhandlerRemoved(ChannelHandlerContext ctx)Do nothing by default, sub-classes may override this method.booleanisWriting()Returnstrueif thePcapWriteHandleris currently writing packets to theOutputStreamelse returnsfalse.voidpause()Pause thePcapWriteHandlerfrom writing packets to theOutputStream.voidresume()Resume thePcapWriteHandlerto writing packets to theOutputStream.java.lang.StringtoString()voidwrite(ChannelHandlerContext ctx, java.lang.Object msg, ChannelPromise promise)CallsChannelOutboundInvoker.write(Object, ChannelPromise)to forward to the nextChannelOutboundHandlerin theChannelPipeline.static voidwriteGlobalHeader(java.io.OutputStream outputStream)Writes the Pcap Global Header to the providedOutputStream-
Methods inherited from class io.netty.channel.ChannelDuplexHandler
bind, close, connect, deregister, disconnect, flush, read
-
Methods inherited from class io.netty.channel.ChannelInboundHandlerAdapter
channelInactive, channelReadComplete, channelRegistered, channelUnregistered, channelWritabilityChanged, userEventTriggered
-
Methods inherited from class io.netty.channel.ChannelHandlerAdapter
ensureNotSharable, handlerAdded, isSharable
-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
-
Methods inherited from interface io.netty.channel.ChannelHandler
handlerAdded
-
-
-
-
Constructor Detail
-
PcapWriteHandler
@Deprecated public PcapWriteHandler(java.io.OutputStream outputStream)
Deprecated.UsePcapWriteHandler.Builderinstead.Create newPcapWriteHandlerInstance.captureZeroByteis set tofalseandwritePcapGlobalHeaderis set totrue.- Parameters:
outputStream- OutputStream where Pcap data will be written. Callclose()to close this OutputStream.- Throws:
java.lang.NullPointerException- IfOutputStreamisnullthen we'll throw anNullPointerException
-
PcapWriteHandler
@Deprecated public PcapWriteHandler(java.io.OutputStream outputStream, boolean captureZeroByte, boolean writePcapGlobalHeader)Deprecated.UsePcapWriteHandler.Builderinstead.Create newPcapWriteHandlerInstance- Parameters:
outputStream- OutputStream where Pcap data will be written. Callclose()to close this OutputStream.captureZeroByte- Set totrueto enable capturing packets with empty (0 bytes) payload. Otherwise, if set tofalse, empty packets will be filtered out.writePcapGlobalHeader- Set totrueto write Pcap Global Header on initialization. Otherwise, if set tofalse, Pcap Global Header will not be written on initialization. This could when writing Pcap data on a existing file where Pcap Global Header is already present.- Throws:
java.lang.NullPointerException- IfOutputStreamisnullthen we'll throw anNullPointerException
-
-
Method Detail
-
writeGlobalHeader
public static void writeGlobalHeader(java.io.OutputStream outputStream) throws java.io.IOExceptionWrites the Pcap Global Header to the providedOutputStream- Parameters:
outputStream- OutputStream where Pcap data will be written.- Throws:
java.io.IOException- if there is an error writing to theOutputStream
-
channelActive
public void channelActive(ChannelHandlerContext ctx) throws java.lang.Exception
Description copied from class:ChannelInboundHandlerAdapterCallsChannelHandlerContext.fireChannelActive()to forward to the nextChannelInboundHandlerin theChannelPipeline. Sub-classes may override this method to change behavior.- Specified by:
channelActivein interfaceChannelInboundHandler- Overrides:
channelActivein classChannelInboundHandlerAdapter- Throws:
java.lang.Exception
-
channelRead
public void channelRead(ChannelHandlerContext ctx, java.lang.Object msg) throws java.lang.Exception
Description copied from class:ChannelInboundHandlerAdapterCallsChannelHandlerContext.fireChannelRead(Object)to forward to the nextChannelInboundHandlerin theChannelPipeline. Sub-classes may override this method to change behavior.- Specified by:
channelReadin interfaceChannelInboundHandler- Overrides:
channelReadin classChannelInboundHandlerAdapter- Throws:
java.lang.Exception
-
write
public void write(ChannelHandlerContext ctx, java.lang.Object msg, ChannelPromise promise) throws java.lang.Exception
Description copied from class:ChannelDuplexHandlerCallsChannelOutboundInvoker.write(Object, ChannelPromise)to forward to the nextChannelOutboundHandlerin theChannelPipeline. Sub-classes may override this method to change behavior.- Specified by:
writein interfaceChannelOutboundHandler- Overrides:
writein classChannelDuplexHandler- Parameters:
ctx- theChannelHandlerContextfor which the write operation is mademsg- the message to writepromise- theChannelPromiseto notify once the operation completes- Throws:
java.lang.Exception- thrown if an error occurs
-
handlerRemoved
public void handlerRemoved(ChannelHandlerContext ctx) throws java.lang.Exception
Description copied from class:ChannelHandlerAdapterDo nothing by default, sub-classes may override this method.- Specified by:
handlerRemovedin interfaceChannelHandler- Overrides:
handlerRemovedin classChannelHandlerAdapter- Throws:
java.lang.Exception
-
exceptionCaught
public void exceptionCaught(ChannelHandlerContext ctx, java.lang.Throwable cause) throws java.lang.Exception
Description copied from class:ChannelInboundHandlerAdapterCallsChannelHandlerContext.fireExceptionCaught(Throwable)to forward to the nextChannelHandlerin theChannelPipeline. Sub-classes may override this method to change behavior.- Specified by:
exceptionCaughtin interfaceChannelHandler- Specified by:
exceptionCaughtin interfaceChannelInboundHandler- Overrides:
exceptionCaughtin classChannelInboundHandlerAdapter- Throws:
java.lang.Exception
-
isWriting
public boolean isWriting()
Returnstrueif thePcapWriteHandleris currently writing packets to theOutputStreamelse returnsfalse.
-
pause
public void pause()
Pause thePcapWriteHandlerfrom writing packets to theOutputStream.
-
resume
public void resume()
Resume thePcapWriteHandlerto writing packets to theOutputStream.
-
toString
public java.lang.String toString()
- Overrides:
toStringin classjava.lang.Object
-
close
public void close() throws java.io.IOExceptionClose
PcapWriterandOutputStream.Note: Calling this method does not close
PcapWriteHandler. Only Pcap Writes are closed.- Specified by:
closein interfacejava.lang.AutoCloseable- Specified by:
closein interfacejava.io.Closeable- Throws:
java.io.IOException- IfOutputStream.close()throws an exception
-
builder
public static PcapWriteHandler.Builder builder()
-
-