- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
在 Linux 上,我想快速将正在运行的进程绑定(bind)到它创建的混杂接口(interface)。例如,tcpdump 在开始和结束时会更改接口(interface),我想在该进程运行时有效地将其关联到混杂接口(interface)。
例如,我希望这种方法能够检测正在嗅探的流氓恶意软件。
通常我可以 ps -ef | grep tcpdump
,但在恶意软件案例中,我可能不知道执行工作的进程。
另外,为了加分...如果进程不再运行,您将如何确定接口(interface)是如何变得混杂的? (假设它不在.history 中)
最佳答案
当一个接口(interface)被置于混杂模式时,内核将打印 k() 一条消息。该消息应该最终出现在系统日志中(通常在 /var/log
中),尽管您的入侵者很可能足够聪明来审查日志并隐藏他/她/它的踪迹。以我的愚见,应对这一挑战的唯一正确答案是拥有一个远程日志记录服务器,除了将它们存储到本地磁盘之外,至少还重定向一些系统消息。
要在日志中获取更多信息,您可以通过添加 audit=1
打开内核审计至 kernel command line .
接口(interface)可以处于混杂模式,而无需任何进程主动“保持”它的状态。实际上,您可以使用 ip link set <interface> promisc on
为接口(interface)打开混杂模式。 .使用 ip link set lo promisc on
在您的环回接口(interface)上尝试它,看什么netstat -i
在您的终端上生成,然后使用 ip link set lo promisc off
再次关闭混杂模式并再次检查 netstat -i
环回接口(interface)的标志如何更改。
回答您的第一个问题:无法知道哪个进程将接口(interface)保持在混杂模式,因为一开始可能存在这样的进程。内核在 __dev_set_promiscuity()
点没有详细的进程信息:
if (dev->flags != old_flags) {
pr_info("device %s %s promiscuous mode\n",
dev->name,
dev->flags & IFF_PROMISC ? "entered" : "left");
if (audit_enabled) {
current_uid_gid(&uid, &gid);
audit_log(current->audit_context, GFP_ATOMIC,
AUDIT_ANOM_PROMISCUOUS,
"dev=%s prom=%d old_prom=%d auid=%u uid=%u gid=%u ses=%u",
dev->name, (dev->flags & IFF_PROMISC),
(old_flags & IFF_PROMISC),
from_kuid(&init_user_ns, audit_get_loginuid(current)),
from_kuid(&init_user_ns, uid),
from_kgid(&init_user_ns, gid),
audit_get_sessionid(current));
}
详情见文件net/core/dev.c
在 Linux 内核源代码树中。
关于linux - 我如何发现使接口(interface)混杂的进程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22109935/
我是一名优秀的程序员,十分优秀!