使用 pcap4j 模拟 HTTP/2 流
Simulate an HTTP/2 stream with pcap4j
我正在尝试捕获 TLS 连接的未加密字节并将它们记录到 cap 文件中以分析 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 或 pcap 文件有任何建议,看看我做错了什么?
我写的包是IPv4>TCP>Data
但是 Wireshark 显示
对于 IPv4,版本始终等于 4。您的图像表明您正在尝试编写 IPv4 Header,但十六进制代码显示它不是 IPv4 header。
第一个突出显示的数字是 56。应该是 4 而不是 5。因此 Wireshark 无法将其检测为 IPv4 数据包。
参考我下面的link,它会帮助你理解示例格式。
How to obtain the source IP from a Wireshark dump of an HTTP GET request
对于 TCP,它应该是 06 而不是 bb。
另外你的源IP是0.0.0.0。它不会产生任何错误,但您可以根据需要更改它。
我正在尝试捕获 TLS 连接的未加密字节并将它们记录到 cap 文件中以分析 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 或 pcap 文件有任何建议,看看我做错了什么?
我写的包是IPv4>TCP>Data
但是 Wireshark 显示
对于 IPv4,版本始终等于 4。您的图像表明您正在尝试编写 IPv4 Header,但十六进制代码显示它不是 IPv4 header。
第一个突出显示的数字是 56。应该是 4 而不是 5。因此 Wireshark 无法将其检测为 IPv4 数据包。
参考我下面的link,它会帮助你理解示例格式。
How to obtain the source IP from a Wireshark dump of an HTTP GET request
对于 TCP,它应该是 06 而不是 bb。
另外你的源IP是0.0.0.0。它不会产生任何错误,但您可以根据需要更改它。