killcx可以关闭一个linux上的tcp连接,而不管连接的状态是怎么样的(半开,已建立,等待或关闭状态)。
它是一个Perl的脚本程序,在linux上使用需要安装一下它的依赖的包。
它依赖三个包:Net::RawIP,Net::Pcap和Net::Pcap。
安装命令如下:
apt-getinstalllibnet-rawip-perl
apt-getinstalllibnet-pcap-perl
cpanNetPacket::Ethernet
安装完成就可以使用了,使用语法为:killcxip:port
注意如果关闭半开状态的连接(即只有一端有连接,另外一端没有连接),killcx需要运行在还有连接存在的主机上才可以关闭连接。
killcx官方文档
如何干掉一条tcp连接(活跃/非活跃)
能提升40倍。DPDK只是单纯的从驱动拿数据,然后组织成数据块给人用,跑在用户态。功能相当于linux的设备无关接口层,处于socket之下,驱动之上。只不过linux协议栈的这部分在核心态。包处理器,很多时候是不用linux内核协议栈的,而是用专用包处理程序,类似于DPDK加上层应用处理。通常会有些硬件加速,包处理效率更高些。缺点是一旦用不上某些功能,那些加速就白费了。而纯软件处理就非常灵活,不过代价就是功耗和性能。
纯DPDK性能非常高,intel自己给出的数据是,处理一个包80时钟周期。一个3.6Ghz的单核双线程至强,64字节小包,纯转发能力超过90Mpps,也就是每秒9千万包。如果加上linux
socket协议栈,比如跑个纯http包反d,那么根据测量,会掉到3000-4000周期处理一个包,单核双线程在2.4Mpps,每秒两百四十万包,性能差40倍。
编写helloworld.c及其对应的Makefile。helloworld.c:
#include <linux/module.h>#include <linux/kernel.h>int init_hello_module(void)
{
printk("***************Start***************\n")
printk("Hello World! Start of hello world module!\n") return 0
}void exit_hello_module(void)
{
printk("***************End***************\n")
printk("Hello World! End of hello world module!\n")
}
MODULE_LICENSE("Dual BSD/GPL")
module_init(init_hello_module)
module_exit(exit_hello_module)1234567891011121314151617181920
Makefile:
# To build modules outside of the kernel tree, we run "make"# in the kernel source treethe Makefile these then includes this# Makefile once again.# This conditional selects whether we are being included from the# kernel Makefile or not.# called from kernel build system: just declare what our modules areobj-m := helloworld.oCROSS_COMPILE =
CC= gcc# Assume the source tree is where the running kernel was built
# You should set KERNELDIR in the environment if it's elsewhere
KERNELDIR ?= /usr/src/linux-headers-$(shell uname -r)# The current directory is passed to sub-makes as argument
PWD := $(shell pwd)all: modulesmodules:
$(MAKE) -C $(KERNELDIR) M=$(PWD) modulesclean:
rm -rf *.o *~ core .depend *.symvers .*.cmd *.ko *.mod.c .tmp_versions $(TARGET)
在Makefile中,在obj-m := helloworld.o这句中,.o的文件名要与编译的.c文件名一致。
KERNELDIR ?= /usr/src/linux-headers-$(shell uname -r)指示当前linux系统内核的源码位置。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)