在百花之中干掉一个杂草连接...

早上接到阿里云的服务器报警,说有一台服务器的流量超标,这个服务器的外网带宽是5M,但是登陆进去使用#iftop -i eth1发现里面的流量已经几乎跑满,如图:

我这个服务器的名称叫online-mts-001,为啥会有一个mail25.u.tsender.com,这个是什么鬼?莫非是通过我的服务器去连接这个“邮箱”域名?于是我就ping了一下这个mail25.u.tsender.com,结果如图:

看到这个域名对应的ip地址是115.29.177.8,嗯,115.29.177.8,哎?这个ip地址好熟悉啊,卧槽,这特么不是这个online-mts-001的外网ip么?

也就是说我这个机器在我不知道的情况下被人绑定了一个域名!但是我这个服务器不是网页服务器,上面那个tsender.com的域名打不开,我检查了服务器一番,发现这个机器没有被人入侵的痕迹,只能说是被人有意/无意(无意的可能性更大,比如看错了阿拉伯数字)绑定了域名。

被人绑定了域名就好比被人起了外号一样,一旦非本人操作就不太好往下摘了,查了很多资料都没有办法,毕竟主动权不在我这里了。

但是回头过来,我们的重心是要解决那个占据了3M带宽的连接,#netstat 看了一下,发现这个连接的具体信息如下:

仅仅是干掉连接的话,方法有很多,关闭网卡再重开或者关闭相应的服务都可以,但是现在的问题是这台服务器是生产环境的服务器,它主要是给用户提供视频拉流,通过抓包分析得知,这位183.228.128.188的用户合法通过外网连接到了这台视频服务器,而且拉取的是高清视频,所以才占据了这么大的带宽。不过我们还是决定先断开这位用户的连接同时不动其他用户的连接,这位183.228.128.188的用户在客户端虽然会发觉视频断开,但是有缓存和人为刷新的客观因素,实际的体验不会差太多,至少不会投诉400...

那么如何干掉一个established连接同时保证其他连接呢?请使用tcpkill。

tcpkill的下载比较有说法,下面是安装步骤:

1)wget http://rpm.repo.onapp.com/ramdisk-hv/centos6/dsniff/libnids-1.24-1.el6.x86_64.rpm

2)wget http://rpm.repo.onapp.com/ramdisk-hv/centos6/dsniff/libnet-1.1.5-1.el6.x86_64.rpm

3)wget http://rpm.repo.onapp.com/ramdisk-hv/centos6/dsniff/dsniff-2.4-0.14.b1.el6.x86_64.rpm

4)rpm -ivh libnet-1.1.5-1.el6.x86_64.rpm

5)rpm -ivh libnids-1.24-1.el6.x86_64.rpm

6)rpm -ivh  dsniff-2.4-0.14.b1.el6.x86_64.rpm

请按顺序操作,不然的话dsniff就会报错:

warning: dsniff-2.4-0.14.b1.el6.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID 0608b895: NOKEY
error: Failed dependencies:
libnet.so.1()(64bit) is needed by dsniff-2.4-0.14.b1.el6.x86_64
libnids.so.1.24()(64bit) is needed by dsniff-2.4-0.14.b1.el6.x86_64

安装完毕之后,就会生成tcpkill命令,如图:

然后断开上面那个大带宽连接的命令是:#./tcpkill -i eth0 src port 9132 and dst port 9595 and src host 115.29.177.8 dst host 183.228.128.188 或者#./tcpkill -s 115.29.177.8:9132 -d 183.228.128.188:9595


但是要注意一下!tcpkill 一定要运行在能接收到应答包的主机上在,最好运行在连接或半连接存在的一端主机上,因为tcpkill会发现这个连接里有数据传输进而感知并且干掉。而且tcpkill默认情况下是只能干掉established状态的连接,对于假死连接(连接在,但是数据不传输)或者半连接(由于tcp keeplive没打开而又没有数据向对端发送,导致一直无法感知次连接其实已经断开)是无法断开的。

如果遇到上述所说的假死连接和半连接就需要手动更改tcpkill的源码,更改原理在https://yq.aliyun.com/articles/59308

如果使用的系统是ubuntu or  debian,还可以使用cutter命令,#apt-get install cutter下载即可。使用方法:http://www.cyberciti.biz/tips/cutting-the-tcpip-network-connection-with-cutter.html

至于第一个问题,怎么把这台服务器上的域名撤除,我倒要好好想想了...

参考资料:

http://www.cyberciti.biz/howto/question/linux/kill-tcp-connection-using-linux-netstat.php

http://www.gnutoolbox.com/tcpkill-command/


时间: 2024-11-05 06:29:18

在百花之中干掉一个杂草连接...的相关文章

【iOS与EV3混合机器人编程系列之四】iOS_WiFi_EV3_Library 剖析之中的一个:WiFi UDP和TCP

在上一篇文章中.我们通过编写EV3 Port Viewer项目实现了iOS监測EV3的实时端口数据. 程序最核心的部分就是我们的开源码库iOS_WiFi_EV3_Library. 那么,在本文中,我们将具体介绍我们这个库的编写.为了完毕这个库,本人參考了网上许多资料,主要包括EV3的源码,win版本号的代码库以及Monobrick相关以及网上的各种资料,在此就不一一列举了. 因为水平有限,本代码库还存在各种问题,望使用的读者见谅. 大家也能够在这个基础之上自己进行改造完好. 为了具体说明代码库的

netty深入学习之中的一个: 入门篇

netty深入学习之中的一个: 入门篇 本文代码下载: http://download.csdn.net/detail/cheungmine/8497549 1)Netty是什么 Netty是Java NIO之上的网络库(API).Netty 提供异步的.事件驱动的网络应用程序框架和工具,用以高速开发高性能.高可靠性的网络服务器和客户端程序. 2)Netty的特性 统一的API.适用于不同的协议(堵塞和非堵塞).基于灵活.可扩展的事件驱动模型.高度可定制的线程模型.可靠的无连接数据Socket支

VC断点失败的原因之中的一个

VC断点失败的原因之中的一个 flyfish 2014-10-23 情景 再debug状态下仅仅有一个cpp文件.命中不了断点. 提示 能够 同意源码与原始版本号不同 不採用,防止出现未知的隐患 问题分析 1 头文件(.h)和实现文件(.cpp),经过编译生成OBJ文件.OBJ文件通过连接(Link)生成EXE文件 简化: .h+.cpp -> obj -> exe 2 PDB文件存储了EXE文件的全部调试信息.每当生成OBJ 文件时.编译器都会将调试信息合并到PDB 中 简化: .h+.cp

设计模式总结之中的一个三五

引言 ? ? ?什么是设计模式(What)? ? ? ? ?设计模式是前人实际经验的积累和总结,都是着重解决实际的问题. ? ? ? ?学习设计模式的目的(Why)? ? ? ? ?通过学习设计模式来提高写出的代码的可维护性.可复用性.可扩展性和灵活性.也就是说让系统可以达到"高内聚.低耦合"的状态. ? ? ? ?如何学习设计模式(How)? ? ? ? ?设计模式是前人的实践经验总结出来的,六大设计原则,23种设计模式:尽管每种模式都有固定的实现方式.可是设计的原则是活的.所以在学

ZeroMQ接口函数之 :zmq_connect - 由一个socket创建一个对外连接

ZeroMQ 官方地址 :http://api.zeromq.org/4-0:zmq_connect zmq_connect(3)  ØMQ Manual - ØMQ/3.2.5 Name zmq_connect - 由一个socket创建一个对外连接(outgoing connection) Synopsis int zmq_connect (void *socket, const char *endpoint); Description zmq_connect()函数将socket连接到节点

实战Java虚拟机之中的一个“堆溢出处理”

从今天開始.我会发5个关于java虚拟机的小系列: 实战Java虚拟机之中的一个"堆溢出处理" 实战Java虚拟机之二"虚拟机的工作模式" 实战Java虚拟机之三"G1的新生代GC" 实战Java虚拟机之四"禁用System.gc()" 实战Java虚拟机之五"开启JIT编译" 以下说说[实战Java虚拟机之中的一个"堆溢出处理"] 在Java程序的执行过程中,假设堆空间不足.则有可能抛

使用Jquery+EasyUI进行框架项目开发案例解说之中的一个---员工管理源代码分享

使用Jquery+EasyUI 进行框架项目开发案例解说之中的一个 员工管理源代码分享 在開始解说之前,我们先来看一下什么是Jquery EasyUI?jQuery EasyUI是一组基于jQuery的UI插件集合,而jQuery EasyUI的目标就是帮助web开发人员更轻松的打造出功能丰富而且美观的UI界面.开发人员不须要编写复杂的javascript,也不须要对css样式有深入的了解,开发人员须要了解的仅仅有一些简单的html标签.jQuery EasyUI为我们提供了大多数UI控件的使用

【美妙的Python之中的一个】Python简单介绍及环境搭建

美妙的Python之Python简单介绍及安装         简而言之: Python 是能你无限惊喜的语言,与众不同.             1.Python:          Python英文意思为蟒蛇,故又称为蟒蛇语言,在图标设计上有所体现,贵铎·范·罗萨姆(Guido van Rossum)于1989年创立.Python的特质,简单,优雅,健壮,继承传统编程语言的强大性与通用性,同一时候兼具简单脚本的简单性.         Python的哲学:仅仅用一种方法,最好是仅仅有一种方法

客户端一个http连接包含两个方向,一个是这个http连接的输入,另一个是这个http连接的输出。

1.客户端一个http连接包含两个方向,一个是这个http连接的输入,另一个是这个http连接的输出. 利用httpclient进行ip地址和端口号连接后,http的输出端作为http请求参数设置.http输出端用于http请求设置. http输入端,用于接收服务端传回来的数据. 其中有个关键的http.openConencetion()方法来启动连接.和httpConn.getInputStream()用于接收服务器端返回的数据. 1.客户端获取json字符串 public class Htt