美文网首页开发辅助技术
Linux中端口占用检查

Linux中端口占用检查

作者: GeekerLou | 来源:发表于2019-01-11 23:02 被阅读0次

    端口检查指令

    lsof

    lsof -i:端口号用于查询某一端口的占用情况,比如查询我们熟悉的3306端口的使用情况,可以使用lsof -i:3306

    root@iZbp11s2rh7xf6u48hlcroZ:~# lsof -i:3306
    COMMAND   PID  USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
    mysqld  20109 mysql   16u  IPv6  50086      0t0  TCP *:mysql (LISTEN)
    

    可以看到3306端口已经被mysql数据库的守护进程mysqld给占用了。

    netstat

    netstat -tunpl|grep 端口号,用于查看指定的端口号的进程情况,如查看3306端口的进程情况,可以使用netstat -tunpl|grep 3306

    root@iZbp11s2rh7xf6u48hlcroZ:~# netstat -tunpl
    Active Internet connections (only servers)
    Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
    tcp        0      0 127.0.0.1:32000         0.0.0.0:*               LISTEN      4350/java       
    tcp        0      0 127.0.0.1:8005          0.0.0.0:*               LISTEN      16977/java      
    tcp        0      0 0.0.0.0:8009            0.0.0.0:*               LISTEN      16977/java      
    tcp        0      0 0.0.0.0:6379            0.0.0.0:*               LISTEN      23371/redis-server 
    tcp        0      0 0.0.0.0:8080            0.0.0.0:*               LISTEN      16977/java      
    tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      911/sshd        
    tcp        0      0 127.0.0.1:8088          0.0.0.0:*               LISTEN      18522/influxd   
    tcp6       0      0 :::3306                 :::*                    LISTEN      20109/mysqld    
    tcp6       0      0 :::6379                 :::*                    LISTEN      23371/redis-server 
    tcp6       0      0 :::8086                 :::*                    LISTEN      18522/influxd   
    udp        0      0 0.0.0.0:68              0.0.0.0:*                           614/dhclient    
    udp        0      0 172.16.113.172:123      0.0.0.0:*                           755/ntpd        
    udp        0      0 127.0.0.1:123           0.0.0.0:*                           755/ntpd        
    udp        0      0 0.0.0.0:123             0.0.0.0:*                           755/ntpd        
    udp6       0      0 :::123                  :::*                                755/ntpd   
    
    root@iZbp11s2rh7xf6u48hlcroZ:~# netstat -tunpl|grep 3306
    tcp6       0      0 :::3306                 :::*                    LISTEN      20109/mysqld  
    

    对上述指令中的关键参数进行一下介绍:

    -t (tcp):仅显示tcp相关的选项;
    -u(udp):仅显示udp相关的选项;
    -n:拒绝显示别名,能显示为数字的全部显示为数字;
    -p:显示建立连接的程序名;
    -l:仅列出在listen的服务状态;
    

    端口扫描程序

    下面给出一个python编写的简单的扫描的端口占用检测的程序ip_scan.py,该程序可以检测指定的IP地址下0-65534端口的占用情况,完整的脚本程序如下,无需引用任何的第三方的包:

    #!/usr/bin/env python
    # -*- encoding:utf-8 -*-
    
    import socket, time, thread
    
    socket.setdefaulttimeout(3)  # 设置套接字的默认超时时间
    
    def socket_scan(ip, port):
        """
        输入IP和端口号,扫描判断端口是否被占用
        :param ip: 待扫描的IP地址
        :param port: 待扫描的端口号
        :return:
        """
        try:
            if port > 65535:
                print u'端口扫描结束'
            s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
            # 使用了socket.connect_ex方法,该方法不会抛出异常,只会给出错误码,
            result = s.connect_ex((ip, port))
            # 如果错误码为0表示成功连上了某个端口;如果返回其他值表示出错了,端口没有打开。
            if result == 0:
                lock.acquire()
                print ip, u':', port, u'端口已经被占用'
                lock.release()
        except:
            print u'端口扫描异常'
    
    
    def ip_scan(ip):
        """
        输入IP地址,扫描0-65534端口情况
        :param ip:
        :return:
        """
        try:
            print u'开始扫描 %s' % ip
            start_time = time.time()
            for i in range(0, 65534):
                thread.start_new_thread(socket_scan, (ip, int(i)))
            print u'端口扫描完成,总共耗时:%.2f秒' % (time.time() - start_time)
            # raw_input("Please press enter to exit")
        except:
            print u'扫描ip出错'
    
    if __name__ == '__main__':
        ip_address = raw_input("Please input the IP address you want to scan: ")
        lock = thread.allocate_lock()
        ip_scan(ip_address)
    

    在本人的一台阿里云的云主机上的测试结果如下所示:

    root@iZbp11s2rh7xf6u48hlcroZ:/home/louxj424/document# python ip_scan.py 
    Please input the IP address you want to scan: 127.0.0.1
    开始扫描 127.0.0.1
    127.0.0.1 : 22 端口已经被占用
    127.0.0.1 : 3306 端口已经被占用
    127.0.0.1 : 6379 端口已经被占用
    127.0.0.1 : 8005 端口已经被占用
    127.0.0.1 : 8009 端口已经被占用
    127.0.0.1 : 8080 端口已经被占用
    127.0.0.1 : 8086 端口已经被占用
    127.0.0.1 : 8088 端口已经被占用
    127.0.0.1 : 32000 端口已经被占用
    端口扫描完成,总共耗时:5.05秒
    

    相关文章

      网友评论

        本文标题:Linux中端口占用检查

        本文链接:https://www.haomeiwen.com/subject/zyifdqtx.html