linuxクイッククエリーポート占有プログラム


仕事中、ポートの占有によってサービスが起動できない場合がよくあります.この場合、通常、問題を解決するには3つのステップが必要です.
1.ポートを占有するプログラムpid(netstat-tunlp|grep pid)を見つける
2.pidでプログラムを確認して確定する(ps aux|grep pid)
3.killこのプログラムを削除し、サービスを再起動すればよい(kill-9 pid)
例は次のとおりです.
5140ポートを表示する場合、netstat-tunlp|grep 5140
# 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      
[root@gy01 jar]# netstat -unlp | grep 5140
udp        0      0 0.0.0.0:5140            0.0.0.0:*                           26805/java  

いくつかのパラメータの意味について

 -t (tcp)  tcp 
 -u (udp) udp 
 -n  , 
 -l  Listen( ) 
 -p  

プロセスの表示
[root@gy01 jar]# ps -aux | grep 26805
root     20678  0.0  0.0 112676   976 pts/0    S+   12:00   0:00 grep --color=auto 26805
flume    26805  4.5  9.8 29811516 13009992 ?   Sl   12 03 117:25 /home/flume/software/java/bin/java -XX:-UseLoopPredicate -XX:CompileCommand=exclude,org.apache.flume.source.kafka.KafkaSourceManager$KafkaConsumerRunnable::run -Xms20g -Xmx20g -XX:MaxDirectMemorySize=512M -XX:+UseG1GC -Dcom.sun.management.jmxremote -Daudit.properties.conf=/home/flume/software/flume-1.6.1.6/bin/../conf/log_audit.properties -Dfield.map.conf=/home/flume/software/flume-1.6.1.6/bin/../conf/field_map.properties -Dflume.root.logger=INFO,LOGFILE -Dflume.kerberos.enabled=true -cp /home/flume/software/flume-1.6.1.6/conf:/home/flume/software/flume-1.6.1.6/lib/*:/home/flume/software/flume-1.6.1.6/plugins.d/elasticSearch-sink/lib/*:/home/flume/software/flume-1.6.1.6/plugins.d/kafka-source/lib/*:/home/flume/software/hadoop-2.7.2.4/etc/hadoop:/home/flume/software/hadoop-2.7.2.4/share/hadoop/common/lib/activation-1.1.jar:/home/flume/software/hadoop-2.7.2.4/share/hadoop/common/lib/apacheds-i18n-2.0.0-M15.jar:/home/flume/software/hadoop-2.7.2.4/share/hadoop/common/lib/apacheds-kerberos-codec-2.0.0-M15.jar:/home/flume/software/hadoop-2.7.2.4/share/hadoop/common/lib/api-asn1-api-1.0.0-M20.jar:/home/flume/software/hadoop-2.。。。。。。。。。。。。。。。。。。。。。。。。。。

最後にkillプロセスで
[root@gy01 ~]# kill -9 20893

 
監視ポートに使用されるスクリプトを貼り付けます(http://www.cnblogs.com/wangtao1993/p/6144183.html )
#!/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