java - 使用半开/胚胎连接监控 TCP 连接
问题描述
我想使用RFC793中定义的TCP半开放或初期连接来监视 TCP/IP 端点。这种监视的目的是检测 TCP 端点是否可用。Hal-open 监控对于减少此类 TCP 端点监控的足迹很重要。TCP 动画是.SYN->SYN-ACK<-RST
是否可以在 Java 中实现这样的监控?使用 Netty 库?
解决方案
这似乎是可以实现的,但需要为 java 使用 TCP 的另一种低级实现。
低级发送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
推荐阅读
- recursion - 如何找到此代码的递归关系?
- azure - Get-AzADUser 在 Azure Devops MS 托管代理上返回空
- css - 在 Shopify 的主页上添加横幅
- html - 为什么选中复选框时图像不滑动?
- node.js - Expressjs - 发送后无法设置标题
- flutter - 如何在 dio resquest 中传递 cookie/会话 ID?
- apache-spark - Spark:编码器的默认值
- java - 在 Spring Boot 中从项目 a-> 项目 b 中分级导入类
- r - R NLS 收敛问题
- qt - 为什么 Qt Creator 看不到 QCoreApplication