今天要使用python寫一個端口探測的小程序,以檢測一些特定的服務(wù)端口有沒有被占用,突然發(fā)現(xiàn)自己居然不知道在linux中如何查詢端口被占用的情況,天吶,趕快學習一下玄货。??
Linux如何查看端口
1、lsof -i:端口號 用于查看某一端口的占用情況悼泌,比如查看8000端口使用情況誉结,lsof -i:8000
# lsof -i:8000COMMAND? PID USER? FD? TYPE? DEVICE SIZE/OFF NODE NAME
lwfs? ? 22065root6uIPv443950530t0? TCP *:irdmi (LISTEN)
可以看到8000端口已經(jīng)被輕量級文件系統(tǒng)轉(zhuǎn)發(fā)服務(wù)lwfs占用
2、netstat -tunlp |grep 端口號券躁,用于查看指定的端口號的進程情況,如查看8000端口的情況掉盅,netstat -tunlp |grep 8000
# netstat -tunlp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address? ? ? ? ? ? ? Foreign Address? ? ? ? ? ? State? ? ? PID/Program name?
tcp? ? ? ? 000.0.0.0:1110.0.0.0:*? ? ? ? ? ? ? ? ? LISTEN4814/rpcbind? ? ? ?
tcp? ? ? ? 000.0.0.0:59080.0.0.0:*? ? ? ? ? ? ? ? ? LISTEN25492/qemu-kvm? ? ?
tcp? ? ? ? 000.0.0.0:69960.0.0.0:*? ? ? ? ? ? ? ? ? LISTEN22065/lwfs? ? ? ? ?
tcp? ? ? ? 00192.168.122.1:530.0.0.0:*? ? ? ? ? ? ? ? ? LISTEN38296/dnsmasq? ? ?
tcp? ? ? ? 000.0.0.0:220.0.0.0:*? ? ? ? ? ? ? ? ? LISTEN5278/sshd? ? ? ? ?
tcp? ? ? ? 00127.0.0.1:6310.0.0.0:*? ? ? ? ? ? ? ? ? LISTEN5013/cupsd? ? ? ? ?
tcp? ? ? ? 00127.0.0.1:250.0.0.0:*? ? ? ? ? ? ? ? ? LISTEN5962/master? ? ? ?
tcp? ? ? ? 000.0.0.0:86660.0.0.0:*? ? ? ? ? ? ? ? ? LISTEN44868/lwfs? ? ? ? ?
tcp? ? ? ? 000.0.0.0:80000.0.0.0:*? ? ? ? ? ? ? ? ? LISTEN22065/lwfs
# netstat -tunlp |grep8000tcp? ? ? ? 000.0.0.0:80000.0.0.0:*? ? ? ? ? ? ? ? ? LISTEN22065/lwfs
說明一下幾個參數(shù)的含義:
-t (tcp) 僅顯示tcp相關(guān)選項
???????????????????????????????? -u (udp)僅顯示udp相關(guān)選項
???????????????????????????????? -n 拒絕顯示別名也拜,能顯示數(shù)字的全部轉(zhuǎn)化為數(shù)字
?????????????????????????????????-l 僅列出在Listen(監(jiān)聽)的服務(wù)狀態(tài)
?????????????????????????????????-p 顯示建立相關(guān)鏈接的程序名
附加一個python端口占用監(jiān)測的程序,該程序可以監(jiān)測指定IP的端口是否被占用趾痘。
1#!/usr/bin/env python2# -*- coding:utf-8 -*-3? 4import socket, time, thread
? 5 socket.setdefaulttimeout(3)#設(shè)置默認超時時間6? 7def socket_port(ip, port):
? 8"""? 9? ? 輸入IP和端口號慢哈,掃描判斷端口是否占用
10? ? """11try:
12ifport >=65535:
13printu'端口掃描結(jié)束'14? ? ? ? s=socket.socket(socket.AF_INET, socket.SOCK_STREAM)
15? ? ? ? result=s.connect_ex((ip, port))
16ifresult==0:
17? ? ? ? ? ? lock.acquire()
18printip,u':',port,u'端口已占用'19? ? ? ? ? ? lock.release()
20except:
21printu'端口掃描異常'22? 23def ip_scan(ip):
24""" 25? ? 輸入IP,掃描IP的0-65534端口情況
26? ? """27try:
28printu'開始掃描 %s'% ip
29? ? ? ? start_time=time.time()
30foriinrange(0,65534):
31? ? ? ? ? ? thread.start_new_thread(socket_port,(ip, int(i)))
32printu'掃描端口完成永票,總共用時:%.2f'%(time.time()-start_time)
33#? ? ? raw_input("Press Enter to Exit")34except:
35printu'掃描ip出錯'36? 37if__name__=='__main__':
38? ? url=raw_input('Input the ip you want to scan: ')
39? ? lock=thread.allocate_lock()
40? ? ip_scan(url)
該程序執(zhí)行結(jié)果如下:
# python scan_port.pyInput the ip you want to scan: 20.0.208.112開始掃描 20.0.208.11220.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