- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我有一个在两个终端系统之间有 Ipsec 隧道的设置。当我在传出接口(interface)(例如 eth0)上捕获数据包时,我只能看到从我的系统发出的加密 ESP 数据包。我必须去查看接收端以查看实际传输的内容,即在接收端我可以看到解密后的数据包。接收方发送的 ack 也类似。它在 linux 内核中实际上是如何工作的?有没有办法在加密之前在 tcpdump 中查看发送方的数据包?
最佳答案
你的问题有3个问题:
第三个问题的答案是
这取决于您的内核和您使用的实现。如果您在 2.4 内核中使用 KLIPS 作为任何 *swan 解决方案的一部分,那么是。
否则,如果您使用的是使用 KAME/*BSD 模型的 2.6 内核
不,除非您更改 Ipssec 或 iptables 配置,以便将数据包发送到另一个未加密的接口(interface),然后将未加密的数据包转发到将在其上加密的接口(interface)。
第一个问题的答案是更改您的 iptables 配置和 IPSec 配置。
这种方式可以在加密数据之前在加密接口(interface)上进行 tcpdump 而无需更改任何内容。
对于 KLIPS 和 2.4 内核,它就像使用 -i 开关将 tcpdump 中的接口(interface)指定为 ipsec0 一样简单。
查看未加密数据的其他选项包括使用带有 -E 标志和相关参数 (see man page) 的 tcpdump,它在数据加密后解密数据,或者使用 tcpdump 捕获加密数据,然后在 Wireshark 中解密(更多有关 Wireshark 中 IPSec 的 ESP 解密的信息位于 here )。
或者,您可以在源代码中使用 printk 或 printk_times 将检测放置到 xfrm或 esp_input .
关于第二个问题,有几张图片解释了它如何在高层次上工作,包括解释 Solaris 实现作为 Oracle's System Administration Guide: IP Services 的一部分的图片。和 Linux's Foundation Network Flow through the kernel diagram .
另见以下 reference .基本上,无论是使用 setkey 的手动配置还是使用用户空间中的 IKE 守护进程的自动配置,都会将信息传递给 XFRM,然后 XFRM 在数据包到达 netfilter 预路由之前对其进行转换。
参见 here有关 KLIPS 和 KAME 历史的更多信息。
关于linux - 如何在加密之前在 tcpdump 中查看传出的 ESP 数据包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21931614/
回车和有什么区别 push ebp mov ebp, esp sub esp, imm 说明?有性能差异吗?如果是这样,哪个更快,为什么编译器总是使用后者? 与离开和类似 mov esp, eb
我有以下 NASM 汇编程序,运行时间约为 9.5 秒: section .text global _start _start: mov eax, 0 mov ebx, 8 loop:
根据互联网上的许多教程,据说您可以找到以下结构的命令行参数: 然而,在花一些时间测试我为 NASM 编写的汇编代码后,我发现 ESP 的值是一些数字,例如: -144807325 实际参数计数存储在更
1. 设备烧录的程序rainmaker自带gpio示例 2. swaggerapis登录账户 3. 调用Rainmaker封装好的py
文章结构: 项目概述 成品预览 项目框架 硬件资料,代码 项目槽点 -项目
我是一个学习汇编的初学者,在函数调用之前保留 ESP 寄存器时,通过加法或减法来实现是否重要?很难解释,请考虑以下内容 mov esi, esp sub esp, 12 // on 32bit OS
我反汇编了一个小程序,该程序询问用户的姓名,然后输出“Hello + [user's_name]” 这是反汇编的输出: 主要功能: 打招呼功能: 我注意到,对于 main() 函数,ESP 寄存器递减
我正在从事 Visual Studio 项目项目 A(在编译时生成静态库) 有课 using namespace mynamespace; class projectAclass { virtua
从上图中可以看出,函数setAttribute 时发生了错误。从它的调用返回。 有谁知道如何解决图中显示的这个错误?我知道这是调用约定之间的错误,但是如何找出 setAttribute 的调用约定是什
我用 QT 制作了一个 .dll 文件并将其加载到我的应用程序中。当它即将从一个函数返回时,我收到: The value of ESP was not properly saved across a
我找不到答案。从我读到的 %ebp 有 32 位,将 %esp 移动到 %ebp 你仍然有 32 位,然后减去 70 到 32,我不明白其余的。我对此很陌生,所以我不是很精通。请给出详细的解释。谢谢!
我有一个从 c 程序调用的简单汇编函数,我必须使用需要内存操作数的指令( FIDIV )。 将值移动到 [esp - 2] 是否安全并在下一条指令中使用它,或者以这种方式使用堆栈永远不会安全? 我知道
以下陈述有什么区别? mov %eax,%esp mov %eax,(%esp) 我正在努力散布一个二元炸弹,但在处理一些 mov 时遇到了问题。和 leal在程序集的早期命令。 最佳答案 这会将 %
我使用 duinotech XC-3800 在 ESP32 芯片上使用 ESP IDF 测试运行裸机代码,并在图像大小方面获得以下结果。 ESP32 的分析二进制大小 文件夹结构 温度/ 主要的/ C
我正在 OS X(32 位)上执行系统调用,如下所示: push 123 mov eax, 1 sub esp, 4 int 0x80 而且我不太明白 sub esp, 4 间隙。 我在某处读到,BS
当我在 gdb 中反汇编 main() 时,它会重新调整此结果: 0x0804854c : push ebp 0x0804854d : mov ebp,esp 0x0804
我目前正在学习英特尔处理器的汇编。既然堆栈“向下增长”,为什么我们必须添加才能访问特定元素 [ebp + 8] ;; This will access the first param 我知道我们必须跳
我试图了解如何将堆栈与程序集一起使用,在我尝试时,我在 SO 中的一个问题中遇到了以下代码,即: push ecx mov eax, 4 mov ebx, 1 mov ecx, result m
我有这个 C 代码部分: #include void main() { int n, array[1000], c, d, t, e; char step; puts("Enter a number
我不太明白为什么 gcc 在调用函数之前要先将 esp 减去 12。 pushl %ebp movl %esp,%ebp sub $12,%esp socke
我是一名优秀的程序员,十分优秀!