Linux 查看端口占用

一、lsof 查看端口占用

lsof -i:端口号 可以查看某一端口的占用情况:

# lsof -i:8000
COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
lwfs    22065 root    6u  IPv4  4395053      0t0  TCP *:irdmi (LISTEN)

可以看到 8000 端口已被轻量级文件系统转发服务 lwfs 占用。

二、netstat 查看端口进程

netstat -tunlp | grep 端口号 可以查看指定端口的进程情况:

# netstat -tunlp
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:111             0.0.0.0:*               LISTEN      4814/rpcbind
tcp        0      0 0.0.0.0:5908            0.0.0.0:*               LISTEN      25492/qemu-kvm
tcp        0      0 0.0.0.0:6996            0.0.0.0:*               LISTEN      22065/lwfs
tcp        0      0 192.168.122.1:53        0.0.0.0:*               LISTEN      38296/dnsmasq
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      5278/sshd
tcp        0      0 127.0.0.1:631           0.0.0.0:*               LISTEN      5013/cupsd
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      5962/master
tcp        0      0 0.0.0.0:8666            0.0.0.0:*               LISTEN      44868/lwfs
tcp        0      0 0.0.0.0:8000            0.0.0.0:*               LISTEN      22065/lwfs

# netstat -tunlp | grep 8000
tcp        0      0 0.0.0.0:8000            0.0.0.0:*               LISTEN      22065/lwfs

参数含义如下:

参数 含义
-t 仅显示 TCP 相关选项
-u 仅显示 UDP 相关选项
-n 拒绝显示别名,能显示数字的全部转化为数字
-l 仅列出在 Listen(监听)的服务状态
-p 显示建立相关链接的程序名

三、附:Python 端口占用监测

下面附一个 Python 端口占用监测程序,可以监测指定 IP 的端口是否被占用:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import socket, time, thread

socket.setdefaulttimeout(3)  # 设置默认超时时间

def socket_port(ip, port):
    """
    输入 IP 和端口号,扫描判断端口是否占用
    """
    try:
        if port >= 65535:
            print u'端口扫描结束'
        s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        result = s.connect_ex((ip, port))
        if result == 0:
            lock.acquire()
            print ip, u':', port, u'端口已占用'
            lock.release()
    except:
        print u'端口扫描异常'

def ip_scan(ip):
    """
    输入 IP,扫描 IP 的 0-65534 端口情况
    """
    try:
        print u'开始扫描%s' % ip
        start_time = time.time()
        for i in range(0, 65534):
            thread.start_new_thread(socket_port, (ip, int(i)))
        print u'扫描端口完成,总共用时:%.2f' % (time.time() - start_time)
        # raw_input("Press Enter to Exit")
    except:
        print u'扫描 ip 出错'

if __name__ == '__main__':
    url = raw_input('Input the ip you want to scan:')
    lock = thread.allocate_lock()
    ip_scan(url)

该程序执行结果如下:

# python scan_port.py
Input the ip you want to scan:20.0.208.112
开始扫描20.0.208.112
20.0.208.112:111端口已占用
20.0.208.112:22端口已占用
20.0.208.112:8000端口已占用
20.0.208.112:15996端口已占用
20.0.208.112:41734端口已占用
扫描端口完成,总共用时:9.38

   转载规则


《Linux 查看端口占用》 吴杭沉 采用 知识共享署名 4.0 国际许可协议 进行许可。
 上一篇
JSON/YAML 数据模型 JSON/YAML 数据模型
从结构上看,所有的数据最终都可以分解成三种类型: 标量(scalar):一个单独的字符串或数字,如”北京”。 序列(sequence):若干相关数据按顺序并列,又称数组(array)或列表(list),如”北京,上海”。 映射(mappi
2020-02-06
下一篇 
Linux nc(netcat) 使用指南 Linux nc(netcat) 使用指南
netcat 号称 TCP/IP 的瑞士军刀,以体积小(可执行文件约 200KB)、功能灵活著称,各大发行版默认安装。netcat 主要有 GNU 版本和 OpenBSD 版本,两者在 debian/ubuntu 下均可安装(Windows
2020-01-09
  目录