我可以模拟拔出网线吗?

时间:2013-07-16 08:48:03

标签: 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上)

2 个答案:

答案 0 :(得分:0)

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

从活动列表(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接口的驱动程序模块

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)。不要在生产环境中这样做。此外,这可能不起作用,具体取决于驾驶员行为本身。

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

答案 1 :(得分:0)

看来答案是“不”,没有办法杀死某个特定的连接。

我最终做的是sudo ifdown eth0(之后sudo ifup eth0恢复网络)。显然,这是一种大锤方法,因为它取消了所有连接。

为了完整性,另一种方法是猜测哪个Apache进程正在运行套接字连接,并且只杀死该进程。但除了涉及猜测之外,这也比我提出的问题更具针对性。