linux netstat命令:网络状态查看命令

我们需要先简单了解一下端口的作用。在互联网中,如果 IP 地址是 IP 服务器在互联网中唯一的地址标识,那么大家可以想象一下:我有一台服务器,它有固定的公网 IP 地址,通过 IP 地址可以找到我的服务器。但是我的服务器中既启动了网页服务(Web 服务),又启动了文件传输服务(FTP 服务),那么你的客户端访问我的服务器,到底应该如何确定你访问的是哪一个服务呢?

端口就是用于网络通信的接口,是数据从传输层向上传递到应用层的数据通道。我们可以理解为每个常规服务都有默认的端口号,通过不同的端口号,我们就可以确定不同的服务。也就是说,客户端通过 IP 地址访问到我的服务器,如果数据包访问的是 80 端口,则访问的是 Web 服务;而如果数据包访问的是 21 端口,则访问的是 FTP 服务。

我们可以简单地理解为每个常规服务都有一个默认端口(默认端口可以修改),这个端口是所有人都知道的,客户端可以通过固定的端口访问指定的服务。而我们通过在服务器中查看已经开启的端口号,就可以判断服务器中开启了那些服务。

netstat 是网络状态查看命令,既可以查看到本机开启的端口,也可以查看有哪些客户端连接。netstat 命令的基本信息如下。

  • 命令名称:netstat。
  • 英文原意:Print network connections, routing tables, interface statistics, masquerade connections, and multicast memberships。
  • 所在路径:/bin/netstat.
  • 执行权限:所有用户。
  • 功能描述:输出网络连接、路由表、接口统计、伪装连接和组播成员。

命令格式如下:

[root@localhost ~]# netstat [选项]

选项:

  • -a:列出所有网络状态,包括 Socket 程序;
  • -c秒数:指定每隔几秒刷新一次网络状态;
  • -n:使用 IP 地址和端口号显示,不使用域名与服务名;
  • -p:显示 PID 和程序名;
  • -t:显示使用 TCP 协议端口的连接状况;
  • -u:显示使用 UDP 协议端口的连接状况;
  • -I:仅显示监听状态的连接;
  • -r:显示路由表;

【例 1】查看本机开启的端口。
这是本机最常用的方式,使用选项"-tuln"。因为使用了"-I"选项,所以只能看到监听状态的连接,而不能看到已经连接状态的连接。例如:

[root@localhost ~]# netstat -tuln
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp  0  0 0.0.0.0:3306  0.0.0.0:* LISTEN
tcp  0  0 0.0.0.0:11211 0.0.0.0:* LISTEN
tcp  0  0 0.0.0.0:22 0.0.0.0:* LISTEN
tcp  0  0:::11211 :::* LISTEN
tcp  0  0 :::80 :::* LISTEN
tcp  0   0 :::22 :::* LISTEN
udp  0   0 0.0.0.0:11211 0.0.0.0:*
udp  0   0:::11211 :::*
#协议接收队列发送队列本机的 IP 地址及端口号 远程主机的 IP 地址及端口号 状态

这个命令的输出较多。
1) Proto:网络连接的协议,一般就是 TCP 协议或者 UDP 协议。
2) Recv-Q:表示接收到的数据,已经在本地的缓冲中,但是还没有被进程取走。
3) Send-Q:表示从本机发送,对方还没有收到的数据,依然在本地的缓冲中,不具备 ACK 标志的数据包。
4) Local Address:本机的 IP 地址和端口号。
5) ForeignAddress:远程主机的 IP 地址和端口号。
6) State:状态。常见的状态主要有以下几种。

  • -LISTEN:监听状态,只有 TCP 协议需要监听,而 UDP 协议不需要监听。
  • -ESTABLISHED:已经建立连接的状态。如果使用"-I"选项,则看不到已经建立连接的状态。
  • -SYN_SENT:SYN 发起包,就是主动发起连接的数据包。
  • -SYN_RECV:接收到主动连接的数据包。
  • -FIN_WAIT1:正在中断的连接。
  • -FIN_WAIT2:已经中断的连接,但是正在等待对方主机进行确认。
  • -TIME_WAIT:连接已经中断,但是套接字依然在网络中等待结束。
  • -CLOSED:套接字没有被使用。

在这些状态中,我们最常用的就是 LISTEN 和 ESTABLISHED 状态,一种代表正在监听,另一种代表已经连接。

【例 2】查看本机有哪些程序开启的端口。
如果使用"-p"选项,则可以查看到是哪个程序占用了端口,并且可以知道这个程序的 PID。例如:

[root@localhost ~]# netstat -tulnp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address  Foreign Address State PID/Program name
tcp  0  0 0.0.0.0:3306  0.0.0.0:* LISTEN 2359/mysqld
tcp  0  0 0.0.0.0:11211  0.0.0.0:* LISTEN 1563/memcached
tcp  0  0 0.0.0.0:22  0.0.0.0:* LISTEN 1490/sshd
tcp  0  0 :::11211 :::* LISTEN 1563/memcached
tcp  0  0 :::80 :::* LISTEN 21025/httpd
tcp  0  0 :::22 :::*
LISTEN 1490/sshd
udp  0  0 0.0.0.0:11211  0.0.0.0:* 1563/memcached
udp  0  0:::11211 :::* 1563/memcached
#比之前的命令多了一个"-p"选项,结果多了可以知道是哪个程序占用了端口

【例 3】 查看所有连接。
使用选项"-an"可以查看所有连接,包括监听状态的连接(LISTEN)、已经建立连接状态的连接(ESTABLISHED)、Socke 程序连接等。因为连接较多,所以输出的内容有很多。例如:

[root@localhost ~]# netstat -an
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address  Foreign Address  State
tcp  0 0 0.0.0.0:3306 0.0.0.0:* LISTEN
tcp  0 0 0.0.0.0:11211 0.0.0.0:* LISTEN
tcp  0 0 117.79.130.170:80 78.46.174.55:58815 SYN_RECV
tcp  0 0 0.0.0.0:22 0.0.0.0:* LISTEN
tcp  0 0 117.79.130.170:22 124.205.129.99:10379 ESTABLISHED
tcp  0 0 117.79.130.170:22 124.205.129.99:11811 ESTABLISHED
...省略部分内容...
udp  0  0 0.0.0.0:11211 0.0.0.0:*
udp  0 0:::11211 :::*
Active UNIX domain sockets (servers and established)
Proto RefCnt Flags Type State I-Node Path
unix  2  [ACC]  STREAM  LISTENING  9761  @/var/run/hald/dbus-fr41WkQn1C
…省略部分内容...

从"Active UNIX domain sockets"开始,之后的内容就是 Socke 程序产生的连接,之前的内容都是网络服务产生的连接。我们可以在"-an"选项的输出中看到各种网络连接状态,而之前的"-tuln"选项则只能看到监听状态。

=======================================================================

centos 的单ip流量控制-CentOS下利用iptables限速及限制每IP连接数

第一步:建立adsl连接,在系统设置——网络设置处有。在图形界面下很容易搞定。

第二步:打开IP转发和伪装(也就是路由与NAT)

1、作为根用户打开/etc/sysconfig/network文件,在文件增加以下一行: GATEWAYDEV=PPP0 这句话的作用是设定默认路由,有时没有也可

2、打开IP转发功能:打开/etc/sysctl.conf文件,修改net.ipv4.ip_forward=0一行,改0改为1

3、重启系统 第三步,设置iptables防火墙,决定那些IP能通过linux主机上网。 下面以允许 192.168.0.0网段为例:

(1)、打开终端在#字提示符下输入以下命令:

iptables -t nat -I POSTROUTING -o ppp0 -j MASQUERADE #这句意思是伪装从pppo出去的

IP iptables -A FORWARD -s 192.168.0.0/24 -j ACCEPT #这句意思是转发来自192.168.0.0网段的通讯

iptables -A FORWARD -d 192.168.0.0/24 -j ACCEPT #这句意思是转发到达192.168.0.0网段的通讯

iptables -A FORWARD -s ! 192.168.0.0/24 -j DROP #这句意思是拒绝转发非192.168.0.0网段的通讯。

(2)、保存以上防火墙规则,以保证重启后还有效 输入下面命令 iptables-save > /etc/sysconfig/iptables 这样,你的linux路由器应该就能跑起来了。

PS: 所有命令都要区分大小写。 限速的实现:在linux中有专门限速的软件--tc,但TC的语法新手难以掌握,我们可以在防火墙上通过限定某个IP或某段IP在一秒内通过的数据包的 数量来限速。 下面以限制192.168.0.2这个IP的网速为例说说。 在桌面环境下打开/etc/syscofngi/iptables 有没有发现,刚才的设定全记录在这个文件里,现在做的就在这个文件里添加规则就得了。

1、先要找到filter

2、在filter下面一行增加以下两行

-A FORWARD -m limit -d 192.168.0.2 --limit 30/sec -j ACCEPT # 这句意思是限定每秒只转发30个到达192.168.0.2的数据包(约每秒45KB 一个数据包是1.5KB)

-A FORWARD -d 192.168.0.2 -j DROP #这句作用是超过限制的到达192.168.0.2的数据包不通过)

(3)、重启系统,限速就实现了。

(4)、限制上传速度也一样,把上面两条中的d 改为s就得了。 限制每ip连接数 ,内核 2.3以上,否则要打conlimit补丁,重编译内核。

iptables -I FORWARD -p tcp -s 192.168.0.0/24 -m connlimit --connlimit-above 20 -j REJECT

iptables -I INPUT -p tcp -s 192.168.0.0/24 -m connlimit --connlimit-above 20 -j REJECT

========================================================================

使用iptables给特定IP或端口限流

上篇文章《linux/VPS使用WonderShaper限制网卡上传/下载带宽速率》介绍了使用WonderShaper对服务器自身的上传带宽下载带宽进行限流,比较适合长期大量占用带宽而可能被IDC定义为服务滥用最终导致被停机的一种使用场景,可以有效的进行规避。今天主要记录下如何使用 iptables 对访问和请求的IP/端口进行限流或限制并发量,基于公平原则改善网络访问体验,并缓解CC攻击对服务器造成的影响。

限制指定端口并发数

首先输入命令service iptables stop关闭iptables(注意:iptables可能会有问题,貌似在旧版本中不被认为是一个服务,而是防火墙)

限制端口并发数很简单,IPTABLES就能搞定了,假设你要限制端口8388IP最大连接数为5,两句话命令:

iptables -I INPUT -p tcp --dport 8388 -m connlimit --connlimit-above 5 -j DROP
iptables -I OUTPUT -p tcp --dport 8388 -m connlimit --connlimit-above 5 -j DROP

我再举个例子,比如你想限制从1024-10240的端口

iptables -I INPUT -p tcp --dport 1024:10240 -m connlimit --connlimit-above 5 -j DROP
iptables -I OUTPUT -p tcp --dport 1024:10240 -m connlimit --connlimit-above 5 -j DROP

保存IPTABLES规则即可(service iptables save),其他端口以此类推。

输入命令service iptables start启动

最后用命令查看是否生效

iptables -L -n -v

限制指定端口传输速度

首先输入命令 service iptables stop 关闭 iptables

限制端口并发数很简单,IPTABLES就能搞定了,假设你要限制端口5037的最大连接速度为60个包每秒,两句话命令:

iptables -A INPUT -p tcp --sport 5037 -m limit --limit 60/s -j ACCEPT
iptables -A INPUT -p tcp --sport 5037 -j DROP

也就是限制每秒接受60个包,一般来说每个包大小为64—1518字节(Byte)。

限制IP的访问速度

原理:每秒对特定端口进行速度控制,比如每秒超过700个的数据包直接DROP,从而限制特定端口的速度

iptables -A FORWARD -m limit -d 208.8.14.53 --limit 700/s --limit-burst 100 -j ACCEPT
iptables -A FORWARD -d 208.8.14.53 -j DROP

Linux/VPS下通过iptables限制流量,可通过以下脚本即可实现(首先需要将这台机器配置成网关)。下面给出一个脚本的简单示例:

#限制网段
for ((i = 1; i < 253; i++))
do
/sbin/iptables -A FORWARD -s 192.168.2.$i -m limit \ --limit 60/s -j ACCEPT
/sbin/iptables -A FORWARD -s 192.168.2.$i -j DROPdone
#限制单个ip
/sbin/iptables -A FORWARD -s 192.168.1.135/32 -m limit \ --limit 60/s -j ACCEPT
/sbin/iptables -A FORWARD -s 192.168.1.135/32 -j DROP #当流量小于60/s的时候,iptables 接受并转发。当流量大于60/s 的时候,iptables丢弃数据包

最后说一下如何解决防火墙重启后失败的问题

iptables-save >/etc/sysconfig/iptables
echo 'iptables-restore /etc/sysconfig/iptables' >> /etc/rc.local
chmod +x /etc/rc.d/rc.local

centos 限制用户ip的速率相关推荐

  1. Linux实战案例(4)CentOS清除用户登录记录和命令历史方法

    CentOS清除用户登录记录和命令历史方法 清除登陆系统成功的记录 [root@localhost root]# echo > /var/log/wtmp //此文件默认打开时乱码,可查到ip等 ...

  2. centos普通用户修改文件权限_Linux实战014:Centos创建用户并添加root授权

    刚收到在腾讯云申请的云服务器8台,现在准备分配给不同项目组来使用.为了确保系统及账号的安全,root账号不能直接给到他们.因为root的权限太大,任何的误操作就可能导致系统异常或者数据丢失找不回来.而 ...

  3. CentOS 7修改ip地址(详细)

    CentOS 7修改ip地址 第一步,普通用户登录虚拟机 我们还可以查看一下网卡信息 ip addr 第二步,切换到root用户下(普通用户没有权限修改ip) su root 第三步,切换到/etc/ ...

  4. CentOS配置静态IP及连接Xshell

    CentOS配置静态IP及连接Xshell 前言:本人在学习虚拟机连接Xshell过程中踩了很多坑,使得xshell连接虚拟机失败,经过一番努力最终完成连接,记录一下整个流程,包括静态ip地址配置,与 ...

  5. linux(Ubuntu/Centos) iproute 路由IP地址等命令集合,查看端口链接

    原 linux(Ubuntu/Centos) iproute 路由IP地址等命令集合,查看端口链接 2017年03月20日 16:55:57 风来了- 阅读数:2291 标签: centoslinux ...

  6. go 通过nginx代理后获取用户ip

    go 如果使用自己的服务器,可以直接使用 net/http 来获取 func ip(w http.ResponseWriter, r *http.Request) {fmt.Println(r.Rem ...

  7. CentOS单用户模式登录方法:

    CentOS单用户模式登录方法: 1.重启服务器,一直按 按↑键与↓键进入GRUB引导界面. 2.在出现GRUB引导画面时(CentOS(2.6.18-164**)),按字母e键,进入GRUB编辑状态 ...

  8. 获取用户Ip地址通用方法常见安全隐患 x-forwarded-for

    分析过程 这个来自一些项目中,获取用户Ip,进行用户操作行为的记录,是常见并且经常使用的. 一般朋友,都会看到如下通用获取IP地址方法. function getIP() { if (isset($_ ...

  9. 使用nginx后如何在web应用中获取用户ip及原理解释

    http://www.iteye.com/topic/1124492 问题背景: 在实际应用中,我们可能需要获取用户的ip地址,比如做异地登陆的判断,或者统计ip访问次数等,通常情况下我们使用requ ...

最新文章

  1. 计算机网络学习笔记(16. 计算机网络与Internet发展历史)
  2. VMware Workstation 与 Device/Credential Guard 不兼容。在禁用 Device/Credenti--------------------------解决办法
  3. 双三次插值算法的C++实现与SSE指令优化
  4. X509证书信任管理器类的实现及应用
  5. 三大框架搭建项目常见问题QA整理
  6. echarts树图设置高亮
  7. prince和学生们侃侃而谈系列03
  8. 报错UnicodeDecodeError ‘gbk‘ codec can‘t decode byte 0x93 in position 7104 illegal multibyte sequence
  9. 常州刘国钧计算机专业,2020常州刘国钧高等职业技术学校的录取分数线
  10. 【Alpha】阶段第六次Scrum Meeting
  11. 引用“win10错误事件10016导致蓝屏重启的问题”这个文章
  12. 仅需1秒!搞定100万行数据:超强Python数据分析利器!掌握了吗!
  13. vim 复制一整行 复制多行
  14. Android NFC
  15. 一种基于OpenCV的三维重建实现方案
  16. 地理信息系统入门基础篇(二)---地图投影
  17. 积分中轮换对称性的本质
  18. 【产品经理】 产品经理进阶之路(五):用互联网思维来设计一把椅子
  19. alertdialog怎么水平排列_网图骗人?别墅挂画怎么挂都不好看?答案在这里
  20. 小米3G刷openwrt详解

热门文章

  1. java实践7索引之Hash索引、位图索引、倒排索引原理
  2. Ardunio开发实例-BME680传感器使用
  3. 微信H5拉起(跳转)微信小程序
  4. width:100%和width:inherit (实用,赞)
  5. Java学的好,工作不愁找
  6. 下载NVIDIA老版本驱动教程
  7. 支付宝统一下单支付接口(适用于H5、PC、APP)
  8. 超赞!的装机软件(我的推荐)
  9. 如何拍摄优质的餐饮宣传片之文案篇
  10. 题目:编写函数fin,其功能是计算:(ln(1)+ln(2)+1n(3).....+ln(m))平方根值,s作为函数值返回。