Ⅰ python獲取系統下打開的埠
第一個問題沒啥,用0作為埠那麼就會選擇本地沒有使用的埠。
第二個要麼用python序列化的方法,只要對端用反序列化解釋就可以。要麼用自定義的,藉助於struct的pack/unpack,或者如果跟c通訊,用ctypes定義結構體也可以。看你需要了
Ⅱ 關於ping命令
ttl=255為unix
(轉)
ping 命令的用法Ping
��Ping是個使用頻率極高的實用程序,用於確定本地主機是否能與另一台主機交換(發送與接收)數據報。根據返回的信息,你就可以推斷TCP/IP參數是否設置得正確以及運行是否正常。需要注意的是:成功地與另一台主機進行一次或兩次數據報交換並不表示TCP/IP配置就是正確的,你必須執行大量的本地主機與遠程主機的數據報交換,才能確信TCP/IP的正確性。
��簡單的說,Ping就是一個測試程序,如果Ping運行正確,你大體上就可以排除網路訪問層、網卡、MODEM的輸入輸出線路、電纜和路由器等存在的故障,從而減小了問題的范圍。但由於可以自定義所發數據報的大小及無休止的高速發送,Ping也被某些別有用心的人作為DDOS(拒絕服務攻擊)的工具,前段時間Yahoo就是被黑客利用數百台可以高速接入互聯網的電腦連續發送大量Ping數據報而癱瘓的。
��按照預設設置,Windows上運行的Ping命令發送4個ICMP(網間控制報文協議)回送請求,每個32位元組數據,如果一切正常,你應能得到4個回送應答。
��Ping能夠以毫秒為單位顯示發送回送請求到返回回送應答之間的時間量。如果應答時間短,表示數據報不必通過太多的路由器或網路連接速度比較快。Ping還能顯示TTL(Time To Live存在時間)值,你可以通過TTL值推算一下數據包已經通過了多少個路由器:源地點TTL起始值(就是比返回TTL略大的一個2的乘方數)-返回時TTL值。例如,返回TTL值為119,那麼可以推算數據報離開源地址的TTL起始值為128,而源地點到目標地點要通過9個路由器網段(128-119);如果返回TTL值為246,TTL起始值就是256,源地點到目標地點要通過9個路由器網段。
通過Ping檢測網路故障的典型次序
��正常情況下,當你使用Ping命令來查找問題所在或檢驗網路運行情況時,你需要使用許多Ping命令,如果所有都運行正確,你就可以相信基本的連通性和配置參數沒有問題;如果某些Ping命令出現運行故障,它也可以指明到何處去查找問題。下面就給出一個典型的檢測次序及對應的可能故障:
ping 127.0.0.1--這個Ping命令被送到本地計算機的IP軟體,該命令永不退出該計算機。如果沒有做到這一點,就表示TCP/IP的安裝或運行存在某些最基本的問題。
ping 本機IP--這個命令被送到你計算機所配置的IP地址,你的計算機始終都應該對該Ping命令作出應答,如果沒有,則表示本地配置或安裝存在問題。出現此問題時,區域網用戶請斷開網路電纜,然後重新發送該命令。如果網線斷開後本命令正確,則表示另一台計算機可能配置了相同的IP地址。
ping 區域網內其他IP--這個命令應該離開你的計算機,經過網卡及網路電纜到達其他計算機,再返回。收到回送應答表明本地網路中的網卡和載體運行正確。但如果收到0個回送應答,那麼表示子網掩碼(進行子網分割時,將IP地址的網路部分與主機部分分開的代碼)不正確或網卡配置錯誤或電纜系統有問題。
ping 網關IP--這個命令如果應答正確,表示區域網中的網關路由器正在運行並能夠作出應答。
ping 遠程IP--如果收到4個應答,表示成功的使用了預設網關。對於撥號上網用戶則表示能夠成功的訪問Internet(但不排除ISP的DNS會有問題)。
ping localhost--localhost是個作系統的網路保留名,它是127.0.0.1的別名,每太計算機都應該能夠將該名字轉換成該地址。如果沒有做到這一帶內,則表示主機文件(/Windows/host)中存在問題。
ping www.yahoo.com--對這個域名執行Pin ... 地址,通常是通過DNS 伺服器 如果這里出現故障,則表示DNS伺服器的IP地址配置不正確或DNS伺服器有故障(對於撥號上網用戶,某些ISP已經不需要設置DNS伺服器了)。順便說一句:你也可以利用該命令實現域名對IP地址的轉換功能。
��如果上面所列出的所有Ping命令都能正常運行,那麼你對你的計算機進行本地和遠程通信的功能基本上就可以放心了。但是,這些命令的成功並不表示你所有的網路配置都沒有問題,例如,某些子網掩碼錯誤就可能無法用這些方法檢測到。
Ping命令的常用參數選項
ping IP -t--連續對IP地址執行Ping命令,直到被用戶以Ctrl+C中斷。
ping IP -l 2000--指定Ping命令中的數據長度為2000位元組,而不是預設的32位元組。
ping IP -n--執行特定次數的Ping命令。
Netstat ��Netstat用於顯示與IP、TCP、UDP和ICMP協議相關的統計數據,一般用於檢驗本機各埠的網路連接情況。
如果你的計算機有時候接受到的數據報會導致出錯數據刪除或故障,你不必感到奇怪,TCP/IP可以容許這些類型的錯誤,並能夠自動重發數據報。但如果累計的出錯情況數目佔到所接收的IP數據報相當大的百分比,或者它的數目正迅速增加,那麼你就應該使用Netstat查一查為什麼會出現這些情況了。
---------------------
ping的幾個常見用法
用了這么久的ping命令,這是我第一次把相關的經驗總結寫出來,希望大家喜歡。
先來說說ping的工作原理:
ping的過程實際上就是一個發送icmp echo請求的過程,發送該數據包到被ping 的一方,要求對方響應並回答該數據包,對方收到後,當然就老老實實地答復你了,也許大家奇怪,為什麼從ping的結果中會得到ip地址,這是因為,對方做出的icmp響應並不能簡單地用icmp進行封包就進行傳輸,而是要經過ip協議進行封裝並傳輸的,學過tcp/ip的人都知道,在ip協議對數據包進行封裝的時候,會自動將目的地址和源地址寫進包頭,這樣一來,在回應的信息中我們就可以看到對方的ip地址了 。
一個ping的返回結果:
c:\>ping python
pinging python [192.168.0.2] with 32 bytes of data:
reply from 192.168.0.2: bytes=32 time<10ms ttl=255
reply from 192.168.0.2: bytes=32 time<10ms ttl=255
reply from 192.168.0.2: bytes=32 time<10ms ttl=255
reply from 192.168.0.2: bytes=32 time<10ms ttl=255
ping statistics for 192.168.0.2:
packets: sent = 4, received = 4, lost = 0 (0% loss),
approximate round trip times in milli-seconds:
minimum = 0ms, maximum = 0ms, average = 0ms
從上面這個結果中我們除了獲得ip地址,還可以獲得ttl(time to life,生命周期),ttl是每經過一個路由器就會被減一的一個值,通過ttl的值我們可以簡單地判斷對方的操作系統和經過的路由器的個數。
默認情況下ttl=128為windows,而ttl=255為unix
接下來看一下ping的幾個參數(這里針對幾個比較有用的講一講):
options:
-t 加上該參數,就是不斷地ping對方,直到按ctrl+c結束
-a 這個參數是解析主機名到ip地址,如下例:
c:\>ping -a 192.168.0.2 -n 1
pinging python [192.168.0.2] with 32 bytes of data:
reply from 192.168.0.2: bytes=32 time<10ms ttl=255
ping statistics for 192.168.0.2:
packets: sent = 1, received = 1, lost = 0 (0% loss),
approximate round trip times in milli-seconds:
minimum = 0ms, maximum = 0ms, average = 0ms
注意看這一行「pinging python [192.168.0.2] with 32 bytes of data:」得到主機名python
注意:這個參數只有在區域網內才起作用的
-n count 這個參數可以定製數據echo請求數據包的發送個數,例如上面,我使用-n 1
-l size 該參數定製發送數據包的大小,windows中最大為65500,命令格式:ping ip -l 65500
默認發送的數據包大小為32bytes
-f 在網路上傳輸數據的時候,當數據包的大小超過網路的允許大小的時候,就要進行分段, 然而,該參數的作用就是不允許發送的數據包分段。建議不要使用這個,因為,如果不了 解網路對數據包大小的要求的話,設置該位可能會導致數據無法傳輸,下面兩個結果大家 可以比較一下:
例1:
c:\>ping 192.168.0.1 -l 64 -n 1 -f
pinging 192.168.0.1 with 64 bytes of data:
reply from 192.168.0.1: bytes=64 time<10ms ttl=128
ping statistics for 192.168.0.1:
packets: sent = 1, received = 1, lost = 0 (0% loss),
approximate round trip times in milli-seconds:
minimum = 0ms, maximum = 0ms, average = 0ms
例2:
c:\>ping 192.168.0.1 -l 1500 -n 1 -f
pinging 192.168.0.1 with 1500 bytes of data:
packet needs to be fragmented but df set.(這句話的意思就是,網路要求分段,而該數據中的分段位又被 設置為不允許分段,這就導致數據無法傳送)
ping statistics for 192.168.0.1:
packets: sent = 1, received = 0, lost = 1 (100% loss),
approximate round trip times in milli-seconds:
minimum = 0ms, maximum = 0ms, average = 0ms
大家有興趣可以試試,這樣多試幾次可以試出在你的網路中數據包每段大概被分為多大(不過很辛苦哦)。
-i ttl 這是用來設置生命周期(ttl)的,沒什麼好說的吧,如果不懂的再問吧
-v tos 設置tos(服務類型)的,對此不多闡述,因為關於tos雖然見的不多,但是,其實是有很 多東西值得講的,如果多說就說不完了,而且也不好敘述,所以大家看一下相關書籍了解 一下,關於這方面有不懂的再提問吧。
-r count 這個參數很有意思,有點類似tracert了,作用就是記錄經過的路由器,拿個例子來:
c:\>ping 192.168.0.1 -r 1 -n 1
pinging 192.168.0.1 with 32 bytes of data:
reply from 192.168.0.1: bytes=32 time<10ms ttl=128
route: 192.168.0.1
ping statistics for 192.168.0.1:
packets: sent = 1, received = 1, lost = 0 (0% loss),
approximate round trip times in milli-seconds:
minimum = 0ms, maximum = 0ms, average = 0ms
注意這一行「route: 192.168.0.1」這就是經過的路由器,因為我這里只有兩台計算機,沒有路由器,所以記錄下來的就是默認路由了(也就是被ping主機本身)。大家可以這樣做:ping http://www.sina.com.cn -r 9
會記錄經過的9部路由器的地址哦 ……
注意:-r參數後面的值最小為1,最大為9,也就是說,最多隻能記錄9台(這就不如tracert命令了)。
-w timeout 這個就是用來設置超時的。
c:\>ping 192.168.0.1 -w 1 -n 1
pinging 192.168.0.1 with 32 bytes of data:
reply from 192.168.0.1: bytes=32 time<10ms ttl=128
ping statistics for 192.168.0.1:
packets: sent = 1, received = 1, lost = 0 (0% loss),
approximate round trip times in milli-seconds:
minimum = 0ms, maximum = 0ms, average = 0ms
這個沒有什麼好說的吧,如果感覺線路不怎麼樣,傳輸速度比較慢,那麼,把這個值設置得大一些。
注意:該值後面的timeout的單位是毫秒(ms)
死亡之ping (ping of death)
1. 由於在早期的階段,路由器對包的最大尺寸都有限制,許多操作系統對TCP/IP棧的實現在ICMP包上都是規定64KB,並且在對包的標題頭進行讀取之後,要根據該標題頭里包含的信息來為有效載荷生成緩沖區,當產生畸形的,聲稱自己的尺寸超過ICMP上限的包也就是載入的尺寸超過64K上限時,就會出現內存分配錯誤,導致TCP/IP堆棧崩潰,致使接受方當機。
防範措施:
現在所有的標准TCP/IP實現都已實現對付超大尺寸的包,並且大多數防火牆能夠自動過濾這些攻擊,包括:從windows98之後的windows,NT(service pack 3之後),linux、Solaris、和Mac OS都具有抵抗一般ping of death攻擊的能力。此外,對防火牆進行配置,阻斷ICMP以及任何未知協議,都能防止此類攻擊。
Ⅲ python 如何檢查埠是否是被佔用
可以嘗試用socket去連接相應的埠'成功表明這個埠開放,可能被佔用
Ⅳ 如何用python方法檢測UDP埠
本文實例講述了python檢測遠程udp埠是否打開的方法。分享給大家供大家參考。具體實現方法如下:
復制代碼代碼如下:
import socket
import threading
import time
import struct
import Queue
queue = Queue.Queue()
def udp_sender(ip,port):
try:
ADDR = (ip,port)
sock_udp = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
sock_udp.sendto("abcd...",ADDR)
sock_udp.close()
except:
pass
def icmp_receiver(ip,port):
icmp = socket.getprotobyname("icmp")
try:
sock_icmp = socket.socket(socket.AF_INET, socket.SOCK_RAW, icmp)
except socket.error, (errno, msg):
if errno == 1:
# Operation not permitted
msg = msg + (
" - Note that ICMP messages can only be sent from processes"
" running as root."
)
raise socket.error(msg)
raise # raise the original error
sock_icmp.settimeout(3)
try:
recPacket,addr = sock_icmp.recvfrom(64)
except:
queue.put(True)
return
icmpHeader = recPacket[20:28]
icmpPort = int(recPacket.encode('hex')[100:104],16)
head_type, code, checksum, packetID, sequence = struct.unpack(
"bbHHh", icmpHeader
)
sock_icmp.close()
if code == 3 and icmpPort == port and addr[0] == ip:
queue.put(False)
return
def checker_udp(ip,port):
thread_udp = threading.Thread(target=udp_sender,args=(ip,port))
thread_icmp = threading.Thread(target=icmp_receiver,args=(ip,port))
thread_udp.daemon= True
thread_icmp.daemon = True
thread_icmp.start()
time.sleep(0.1)
thread_udp.start()
thread_icmp.join()
thread_udp.join()
return queue.get(False)
if __name__ == '__main__':
import sys
print checker_udp(sys.argv[1],int(sys.argv[2]))
希望本文所述對大家的Python程序設計有所幫助。
Ⅳ Python 實現埠掃描
一、常見埠掃描的原理
0、秘密掃描
秘密掃描是一種不被審計工具所檢測的掃描技術。
它通常用於在通過普通的防火牆或路由器的篩選(filtering)時隱藏自己。
秘密掃描能躲避IDS、防火牆、包過濾器和日誌審計,從而獲取目標埠的開放或關閉的信息。由於沒有包含TCP 3次握手協議的任何部分,所以無法被記錄下來,比半連接掃描更為隱蔽。
但是這種掃描的缺點是掃描結果的不可靠性會增加,而且掃描主機也需要自己構造IP包。現有的秘密掃描有TCP FIN掃描、TCP ACK掃描、NULL掃描、XMAS掃描和SYN/ACK掃描等。
1、Connect()掃描
此掃描試圖與每一個TCP埠進行「三次握手」通信。如果能夠成功建立接連,則證明埠開發,否則為關閉。准確度很高,但是最容易被防火牆和IDS檢測到,並且在目標主機的日誌中會記錄大量的連接請求以及錯誤信息。
TCP connect埠掃描服務端與客戶端建立連接成功(目標埠開放)的過程:
① Client端發送SYN;
② Server端返回SYN/ACK,表明埠開放;
③ Client端返回ACK,表明連接已建立;
④ Client端主動斷開連接。
建立連接成功(目標埠開放)
TCP connect埠掃描服務端與客戶端未建立連接成功(目標埠關閉)過程:
① Client端發送SYN;
② Server端返回RST/ACK,表明埠未開放。
優點:實現簡單,對操作者的許可權沒有嚴格要求(有些類型的埠掃描需要操作者具有root許可權),系統中的任何用戶都有權力使用這個調用,而且如果想要得到從目標埠返回banners信息,也只能採用這一方法。
另一優點是掃描速度快。如果對每個目標埠以線性的方式,使用單獨的connect()調用,可以通過同時打開多個套接字,從而加速掃描。
缺點:是會在目標主機的日誌記錄中留下痕跡,易被發現,並且數據包會被過濾掉。目標主機的logs文件會顯示一連串的連接和連接出錯的服務信息,並且能很快地使它關閉。
2、SYN掃描
掃描器向目標主機的一個埠發送請求連接的SYN包,掃描器在收到SYN/ACK後,不是發送的ACK應答而是發送RST包請求斷開連接。這樣,三次握手就沒有完成,無法建立正常的TCP連接,因此,這次掃描就不會被記錄到系統日誌中。這種掃描技術一般不會在目標主機上留下掃描痕跡。但是,這種掃描需要有root許可權。
·埠開放:(1)Client發送SYN;(2)Server端發送SYN/ACK;(3)Client發送RST斷開(只需要前兩步就可以判斷埠開放)
·埠關閉:(1)Client發送SYN;(2)Server端回復RST(表示埠關閉)
優點:SYN掃描要比TCP Connect()掃描隱蔽一些,SYN僅僅需要發送初始的SYN數據包給目標主機,如果埠開放,則相應SYN-ACK數據包;如果關閉,則響應RST數據包;
3、NULL掃描
反向掃描—-原理是將一個沒有設置任何標志位的數據包發送給TCP埠,在正常的通信中至少要設置一個標志位,根據FRC 793的要求,在埠關閉的情況下,若收到一個沒有設置標志位的數據欄位,那麼主機應該舍棄這個分段,並發送一個RST數據包,否則不會響應發起掃描的客戶端計算機。也就是說,如果TCP埠處於關閉則響應一個RST數據包,若處於開放則無相應。但是應該知道理由NULL掃描要求所有的主機都符合RFC 793規定,但是windows系統主機不遵從RFC 793標准,且只要收到沒有設置任何標志位的數據包時,不管埠是處於開放還是關閉都響應一個RST數據包。但是基於Unix(*nix,如Linux)遵從RFC 793標准,所以可以用NULL掃描。 經過上面的分析,我們知道NULL可以辨別某台主機運行的操作系統是什麼操作系統。
埠開放:Client發送Null,server沒有響應
埠關閉:(1)Client發送NUll;(2)Server回復RST
說明:Null掃描和前面的TCP Connect()和SYN的判斷條件正好相反。在前兩種掃描中,有響應數據包的表示埠開放,但在NUll掃描中,收到響應數據包表示埠關閉。反向掃描比前兩種隱蔽性高些,當精確度也相對低一些。
用途:判斷是否為Windows系統還是Linux。
4、FIN掃描
與NULL有點類似,只是FIN為指示TCP會話結束,在FIN掃描中一個設置了FIN位的數據包被發送後,若響應RST數據包,則表示埠關閉,沒有響應則表示開放。此類掃描同樣不能准確判斷windows系統上埠開發情況。
·埠開放:發送FIN,沒有響應
·埠關閉:(1)發送FIN;(2)回復RST
5、ACK掃描
掃描主機向目標主機發送ACK數據包。根據返回的RST數據包有兩種方法可以得到埠的信息。方法一是: 若返回的RST數據包的TTL值小於或等於64,則埠開放,反之埠關閉。
6、Xmas-Tree掃描
通過發送帶有下列標志位的tcp數據包。
·URG:指示數據時緊急數據,應立即處理。
·PSH:強制將數據壓入緩沖區。
·FIN:在結束TCP會話時使用。
正常情況下,三個標志位不能被同時設置,但在此種掃描中可以用來判斷哪些埠關閉還是開放,與上面的反向掃描情況相同,依然不能判斷windows平台上的埠。
·埠開放:發送URG/PSH/FIN,沒有響應
·埠關閉:(1)發送URG/PSH/FIN,沒有響應;(2)響應RST
XMAS掃描原理和NULL掃描的類似,將TCP數據包中的ACK、FIN、RST、SYN、URG、PSH標志位置1後發送給目標主機。在目標埠開放的情況下,目標主機將不返回任何信息。
7、Dump掃描
也被稱為Idle掃描或反向掃描,在掃描主機時應用了第三方僵屍計算機掃描。由僵屍主機向目標主機發送SYN包。目標主機埠開發時回應SYN|ACK,關閉時返回RST,僵屍主機對SYN|ACK回應RST,對RST不做回應。從僵屍主機上進行掃描時,進行的是一個從本地計算機到僵屍主機的、連續的ping操作。查看僵屍主機返回的Echo響應的ID欄位,能確定目標主機上哪些埠是開放的還是關閉的。
二、Python 代碼實現
1、利用Python的Socket包中的connect方法,直接對目標IP和埠進行連接並且嘗試返回結果,而無需自己構建SYN包。
2、對IP埠進行多線程掃描,注意的是不同的電腦不同的CPU每次最多創建的線程是不一樣的,如果創建過多可能會報錯,需要根據自己電腦情況修改每次掃描的個數或者將seelp的時間加長都可以。
看完了嗎?感覺動手操作一下把!
python學習網,免費的在線學習python平台,歡迎關注!
本文轉自:https://www.jianshu.com/p/243bb7cfc40f
Ⅵ python怎樣獲取連接的IP的設備信息
以前是有這樣的工具,它會通過常用協議去刺探設備類型。比如windows的版本,計算機名等。現在不知道還有沒有這樣的工具,搜索一下看。
哦。這個應該相當容易了。因為相機是專業設備。所以通常會有一個控制協議。因為是專業的,所以這個socket應該是加密的。 你只需要連接上後,隨便發一個命令,如果被斷開。很可能就是這個相機了。
另外相機通常都是有MAC地址的。如果你發現它在你預計的MAC地址范圍內,也可以知道是它。 相機是專業抓拍的。通常不會放在互聯網上,應該是區域網。你可以排除區域網上的其它計算機,自然了也就知道哪些是相機了。
這些都不是難題。你首先掃描所有的IP地址。再掃描它們的埠數量。如果埠數量多通常是計算機,如果埠只有1-2個就是專業設備。掃描不到的,應該就是計算機啦。
試試,並不難。