使用半开/嵌入式连接监视TCP连接

时间:2020-10-01 10:01:54

标签: java networking tcp netty

我想使用half-open中定义的TCP embryonicRFC793连接来监视TCP / IP端点。这种监视的目的是检测TCP端点是否可用。 Hal-open监视对于减少此类监视对TCP端点的占用空间非常重要。 TCP电影是def ReshapeLayer(x): shape = x.shape # 1 possibility: H,W*channel reshape = Reshape((shape[1],shape[2]*shape[3]))(x) # 2 possibility: W,H*channel # transpose = Permute((2,1,3))(x) # reshape = Reshape((shape[1],shape[2]*shape[3]))(transpose) return reshape model = Sequential() model.add(Conv2D(filters=16, kernel_size=(12, 16), activation='relu', input_shape=input_shape)) model.add(MaxPooling2D(pool_size=(2, 2),strides=2)) model.add(Conv2D(filters=24, kernel_size=(8, 12), activation='relu')) model.add(MaxPooling2D(pool_size=(2, 2),strides=2)) model.add(Conv2D(filters=32, kernel_size=(5, 7), activation='relu')) model.add(MaxPooling2D(pool_size=(2, 2),strides=2)) model.add(Lambda(ReshapeLayer)) # <========== pass from 4D to 3D model.add(Bidirectional(LSTM(10, activation='relu', return_sequences=False))) model.add(Dense(nclasses,activation='softmax')) model.compile(loss='categorical_crossentropy',optimizer='adam') model.summary()

是否可以在Java中实现这种监视?使用Netty库吗?

2 个答案:

答案 0 :(得分:2)

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

该库可能有帮助: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

答案 1 :(得分:0)

@Andremoniy 的答案经过改进,可以构建一个简单的 C 二进制文件,执行半开/胚胎检查。 C 二进制二进制文件需要 RAW SOCKET Linux 功能。它是使用 Runtime.exec() 从 Java 代码执行的。 与使用 rocksaw 库相比的优势是避免使用执行此类检查所需的额外功能来运行整个 Java 进程。