首页 > 解决方案 > 使用半开/胚胎连接监控 TCP 连接

问题描述

我想使用RFC793中定义的TCP半开放初期连接来监视 TCP/IP 端点。这种监视的目的是检测 TCP 端点是否可用。Hal-open 监控对于减少此类 TCP 端点监控的足迹很重要。TCP 动画是.SYN->SYN-ACK<-RST

是否可以在 Java 中实现这样的监控?使用 Netty 库?

标签: javanetworkingtcpnetty

解决方案


这似乎是可以实现的,但需要为 java 使用 TCP 的另一种低级实现。

这个库可能有帮助:https ://github.com/mlaccetti/rocksaw/blob/master/src/main/java/com/savarese/rocksaw/net/RawSocket.java

低级发送SYN命令示例:

https://github.com/dangan249/RawSocket/blob/master/ccs/neu/edu/andang/RawSocketClient.java#L181-L182

private final byte SYN_FLAG = (byte) 2;
private final byte ACK_FLAG = (byte) 16;

    ...
// send the SYN packet
sendMessage(null, this.getCurrentSeqNum(), this.getCurrentACKNum(), SYN_FLAG);
    

归结为只是将正确的数据包写入套接字:

TCPHeader header = new TCPHeader( this.sourcePort, this.destPort, sequenceNum ,
                ackNum, flags , AD_WINDOW_SIZE ) ;

TCPPacket packet = new TCPPacket( header );

...
this.rSock.write( this.destAddress, packet.toByteArray() ) ;

通过这样做,可以实现所需的一系列操作,包括想要的SYN->SYNC-ACK<-RST


推荐阅读