我想使用half-open中定义的TCP embryonic或RFC793连接来监视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库吗?
答案 0 :(得分:2)
这似乎是可以实现的,但是需要使用TCP的另一种低级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 进程。