我试图捕获TLS连接的未加密字节,并将它们记录到capture中,以分析HTTP/2通信量。我做了很多假设,认为这是可能的。但是,如果我能在像Wireshark这样的有用工具中看到流量,那么我愿意对HTTP/2层以下的几乎所有内容进行篡改。
我的方法最终归结为
return object : DelegatingSSLSocket(socket) {
override fun getInputStream(): InputStream {
return object : FilterInputStream(socket.inputStream) {
override fun read(b: ByteArray, off: Int, len: Int): Int {
return super.read(b, off, len).also { readLen ->
dumper.dump(
ipv4ReadPacketBuilder.payloadBuilder(
tcpReadPacketBuilder
.payloadBuilder(
UnknownPacket.Builder().rawData(
b.sliceArray(off.rangeTo(off + readLen))
)
)
)
.build()
)
}
}
}
}
override fun getOutputStream(): OutputStream {
return object : FilterOutputStream(socket.outputStream) {
override fun write(b: ByteArray, off: Int, len: Int) {
super.write(b, off, len)
dumper.dump(
ipv4WritePacketBuilder.payloadBuilder(
tcpWritePacketBuilder
.payloadBuilder(
UnknownPacket.Builder().rawData(b.sliceArray(off.rangeTo(off + len)))
)
)
.build()
)
}
}
}
}有没有人对pcap4j或pcap4j有任何建议来了解我做错了什么?
我正在写的包是IPv4>TCP>Data

但是Wireshark显示

发布于 2021-03-16 14:52:02
对于IPv4,版本总是等于4。您的图像声明您正在尝试编写IPv4头,但是十六进制代码显示它不是IPv4头。

第一个突出显示的数字是56。它应该是4,因此Wireshark无法检测到它是一个IPv4数据包。

参考下面的链接,它将帮助您理解示例格式。
How to obtain the source IP from a Wireshark dump of an HTTP GET request
对于TCP,应该是06而不是bb。

您的源IP也是0.0.0.0。它不会产生任何错误,但是您可以根据您的需求来更改它。

https://stackoverflow.com/questions/66612897
复制相似问题