linux - 可以模拟拔网线吗?

标签 linux sockets

我在本地运行一个长时间运行的套接字连接。当我终止服务器应用程序时,它会干净地关闭。我现在想看看客户端在没有完全关闭时的行为。如果它们在不同的服务器上,我可以拔掉网线。当连接是本地连接时,我没有什么可拉的。 [在这里插入粗鲁的笑话。]

我可以 netstat -an |grep tcp | grep :80 并查看连接,它看起来像这样:

tcp        0      0 10.1.2.3:80          10.1.2.3:40494       ESTABLISHED

我可以使用那个 40494 端口号来终止或挂起套接字,就像我可以使用程序的 PID 来终止它一样吗?

非常相似的问题:How can I simulate a 'plugged network cable' (TCP/IP)? (那个问题问的是Windows,我是Linux)

最佳答案

卸载网络驱动程序的内核模块可能会以您想要的方式终止它。

从事件列表中选择您的网络接口(interface)(eth0、eth1 等...)

ifconfig -a
eth0      Link encap:Ethernet  HWaddr 18:A9:05:68:6F:B0  
          inet6 addr: fe80::1aa9:5ff:fe68:6fb0/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:9000  Metric:1

寻找eth0接口(interface)的驱动模块

ls -l /sys/class/net/eth0/device/driver/module
lrwxrwxrwx  1 root root    0 Aug 15 18:39 module -> ../../../../module/bnx2

列出系统运行的内核模块

lsmod | grep bnx
bnx2i                  48158  0 
cnic                   55511  1 bnx2i
bnx2                   81890  0 

从内存中删除模块需要 root 或 sudo 权限

rmmod -f -w bnx2

这不是一个安全的操作,你以不安全的方式扰乱了操作系统。执行此操作时会发生坏事(tm)。不要在生产环境中这样做。此外,这可能无法正常工作,具体取决于驱动程序行为本身。

也就是说,这是一个有趣的问题,我很想知道结果如何。

关于linux - 可以模拟拔网线吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17671981/

相关文章:

linux - 如何在 Linux Web 服务器上创建快捷方式文件夹?

linux - tcp 接收窗口更新

java - Java(android)中socket.io的文件描述符?

sockets - 一端的套接字上的 close() 是否也会在另一端关闭?

linux - bash 进程监控脚本在找不到进程时回显为空

linux - 为基于 Linux 的操作系统包创建 'graphical' 命令行安装

linux - 在前台启动进程时在 Shell 脚本中获取进程 ID

linux - 使用 LD 将原始数据/资源链接到可执行文件

java - 使用 ObjectInputStream 发送字符串。错误: OptionalDataException

c - 如何在没有 libcurl 的情况下用 C 发出 HTTP get 请求?