wireshark - 使用 pcap4j 模拟 HTTP/2 流
问题描述
我正在尝试捕获 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 标头,但十六进制代码显示它不是 IPv4 标头。
第一个突出显示的数字是 56。应该是 4 而不是 5。因此 Wireshark 无法将其检测为 IPv4 数据包。
请参阅我的以下链接,它将帮助您了解示例格式。
如何从 HTTP GET 请求的 Wireshark 转储中获取源 IP
对于 TCP,它应该是 06 而不是 bb。
您的源 IP 也是 0.0.0.0。它不会产生任何错误,但您可以根据需要更改它。
推荐阅读
- extjs - 如何配置 Ext.grid.plugin.Editable 按钮?
- c - C - 前向声明和使用结构而不是指针
- hadoop - flink 如何从 HDFS 读取 4mc 数据
- python - Mojave 命令“gcc”失败,退出状态为 1
- c - 在 ca 中的 if 语句中声明一个变量是坏习惯吗?
- java - 使用 netbeans ide 构建 apache ignite
- java - java.sql.SQLNonTransientConnectionException
- javascript - window.open() 到另一个屏幕(第二个显示)
- python - python sqlite3中的主键值显示无而不是整数值
- javascript - 循环中的 getElementById 无法正常工作