目錄
小知識點:
三次握手:
狀態(tài):
tcpdump:
一:命令介紹:????
二:命令選項:
tcpdump的表達式:
使用python掃描LAN工具:
subprocess模塊
arp協(xié)議
arp病毒:
ICMP協(xié)議:
如果ping不通可能有什么原因:
小知識點:
負載均衡工作在第四層和第七層
IP地址:點到點
端到端:就是端口號到端口號
服務(wù)進程占用端口號
socket:槽,對接的接口
網(wǎng)絡(luò)socket:ip+port --》192.168.0.1:80
UDP:用戶數(shù)據(jù)報協(xié)議,(http,ftp,ssh,mysql)
TCP:傳輸控制協(xié)議, (qq,DNS,dhcp)
DNS平常使用UDP,但是兩臺電腦傳輸數(shù)據(jù)時,主DNS服務(wù)器和從DNS服務(wù)器使用UDP
TCP
端口號16+16
端口號的范圍:2^16=0-65536
系統(tǒng)和里面常用的端口是0~1023 系統(tǒng)預(yù)留和常用的經(jīng)典端口號(ssh 22;http 80)
liunx里面/etc/service有端口號
seq序列號:每個報文的字節(jié)數(shù)開頭第一個字節(jié)的位置
ack確認號:下一個報文的序列號
6個控制位:
urgent 緊急位
ACK 確認位
push 急迫位
reset 重置位(之前建立過連接,現(xiàn)在失效了,現(xiàn)在重新建立連接)
syn 同步位(需要和別人建立連接)
fin 終止位 (表示想和人家斷開)
16位窗口大?。夯瑒哟翱诘拇笮?/p>
三次握手:
狀態(tài):
CLOSED:初始狀態(tài),表示TCP連接是“關(guān)閉著的”或“未打開的”。
LISTEN :表示服務(wù)器端的某個SOCKET處于監(jiān)聽狀態(tài),可以接受客戶端的連接。
SYN_RCVD :表示服務(wù)器接收到了來自客戶端請求連接的SYN報文。在正常情況下,這個狀態(tài)是服務(wù)器端的SOCKET在建立TCP連接時的三次握手會話過程中的一個中間狀態(tài),很短暫,基本上用netstat很難看到這種狀態(tài),除非故意寫一個監(jiān)測程序,將三次TCP握手過程中最后一個ACK報文不予發(fā)送。當TCP連接處于此狀態(tài)時,再收到客戶端的ACK報文,它就會進入到ESTABLISHED 狀態(tài)。
SYN_SENT :這個狀態(tài)與SYN_RCVD 狀態(tài)相呼應(yīng),當客戶端SOCKET執(zhí)行connect()進行連接時,它首先發(fā)送SYN報文,然后隨即進入到SYN_SENT 狀態(tài),并等待服務(wù)端的發(fā)送三次握手中的第2個報文。SYN_SENT 狀態(tài)表示客戶端已發(fā)送SYN報文。
ESTABLISHED :表示TCP連接已經(jīng)成功建立。
FIN_WAIT_1 :這個狀態(tài)得好好解釋一下,其實FIN_WAIT_1 和FIN_WAIT_2 兩種狀態(tài)的真正含義都是表示等待對方的FIN報文。而這兩種狀態(tài)的區(qū)別是:FIN_WAIT_1狀態(tài)實際上是當SOCKET在ESTABLISHED狀態(tài)時,它想主動關(guān)閉連接,向?qū)Ψ桨l(fā)送了FIN報文,此時該SOCKET進入到FIN_WAIT_1 狀態(tài)。而當對方回應(yīng)ACK報文后,則進入到FIN_WAIT_2 狀態(tài)。當然在實際的正常情況下,無論對方處于任何種情況下,都應(yīng)該馬上回應(yīng)ACK報文,所以FIN_WAIT_1 狀態(tài)一般是比較難見到的,而FIN_WAIT_2 狀態(tài)有時仍可以用netstat看到。
FIN_WAIT_2 :上面已經(jīng)解釋了這種狀態(tài)的由來,實際上FIN_WAIT_2狀態(tài)下的SOCKET表示半連接,即有一方調(diào)用close()主動要求關(guān)閉連接。注意:FIN_WAIT_2 是沒有超時的(不像TIME_WAIT 狀態(tài)),這種狀態(tài)下如果對方不關(guān)閉(不配合完成4次揮手過程),那這個 FIN_WAIT_2 狀態(tài)將一直保持到系統(tǒng)重啟,越來越多的FIN_WAIT_2 狀態(tài)會導(dǎo)致內(nèi)核crash。
TIME_WAIT :表示收到了對方的FIN報文,并發(fā)送出了ACK報文。 TIME_WAIT狀態(tài)下的TCP連接會等待2*MSL(Max Segment Lifetime,最大分段生存期,指一個TCP報文在Internet上的最長生存時間。每個具體的TCP協(xié)議實現(xiàn)都必須選擇一個確定的MSL值,RFC 1122建議是2分鐘,但BSD傳統(tǒng)實現(xiàn)采用了30秒,Linux可以cat /proc/sys/net/ipv4/tcp_fin_timeout看到本機的這個值),然后即可回到CLOSED 可用狀態(tài)了。如果FIN_WAIT_1狀態(tài)下,收到了對方同時帶FIN標志和ACK標志的報文時,可以直接進入到TIME_WAIT狀態(tài),而無須經(jīng)過FIN_WAIT_2狀態(tài)。(這種情況應(yīng)該就是四次揮手變成三次揮手的那種情況)
CLOSING :這種狀態(tài)在實際情況中應(yīng)該很少見,屬于一種比較罕見的例外狀態(tài)。正常情況下,當一方發(fā)送FIN報文后,按理來說是應(yīng)該先收到(或同時收到)對方的ACK報文,再收到對方的FIN報文。但是CLOSING 狀態(tài)表示一方發(fā)送FIN報文后,并沒有收到對方的ACK報文,反而卻也收到了對方的FIN報文。什么情況下會出現(xiàn)此種情況呢?那就是當雙方幾乎在同時close()一個SOCKET的話,就出現(xiàn)了雙方同時發(fā)送FIN報文的情況,這是就會出現(xiàn)CLOSING 狀態(tài),表示雙方都正在關(guān)閉SOCKET連接。
CLOSE_WAIT :表示正在等待關(guān)閉。怎么理解呢?當對方close()一個SOCKET后發(fā)送FIN報文給自己,你的系統(tǒng)毫無疑問地將會回應(yīng)一個ACK報文給對方,此時TCP連接則進入到CLOSE_WAIT狀態(tài)。接下來呢,你需要檢查自己是否還有數(shù)據(jù)要發(fā)送給對方,如果沒有的話,那你也就可以close()這個SOCKET并發(fā)送FIN報文給對方,即關(guān)閉自己到對方這個方向的連接。有數(shù)據(jù)的話則看程序的策略,繼續(xù)發(fā)送或丟棄。簡單地說,當你處于CLOSE_WAIT 狀態(tài)下,需要完成的事情是等待你去關(guān)閉連接。
LAST_ACK :當被動關(guān)閉的一方在發(fā)送FIN報文后,等待對方的ACK報文的時候,就處于LAST_ACK 狀態(tài)。當收到對方的ACK報文后,也就可以進入到CLOSED 可用狀態(tài)了。
CLOSING狀態(tài):
產(chǎn)生的原因是客戶端和服務(wù)端同時關(guān)閉
tcpdump:
是什么?解決什么問題?誰使用?
liunx里面的一個命令,網(wǎng)絡(luò)流量監(jiān)控工具,監(jiān)控網(wǎng)卡,解決網(wǎng)絡(luò)上的問題,例如:數(shù)據(jù)是否到達,里面是否有我們想要的數(shù)據(jù);進行故障排除個分析
ICMP協(xié)議:互聯(lián)網(wǎng)網(wǎng)絡(luò)控制協(xié)議,控制網(wǎng)絡(luò);網(wǎng)絡(luò)通不通,主機是否可達,路由器是否可以使用
一:命令介紹:????
????tcpdump,用簡單的語言概括就是dump the traffic on a network,是一個運行在linux平臺可以根據(jù)使用者需求對網(wǎng)絡(luò)上傳輸?shù)臄?shù)據(jù)包進行捕獲的抓包工具,windows平臺有sniffer等工具,tcpdump可以將網(wǎng)絡(luò)中傳輸?shù)臄?shù)據(jù)包的“包頭”全部捕獲過來進程分析,其支持網(wǎng)絡(luò)層、特定的傳輸協(xié)議、數(shù)據(jù)發(fā)送和接收的主機、網(wǎng)卡和端口的過濾,并提供and、or、not等語句進行邏輯組合捕獲數(shù)據(jù)包或去掉不用的信息。
命令選項和捕獲主機對到主機的數(shù)據(jù)包:
二:命令選項:
-a #將網(wǎng)絡(luò)地址和廣播地址轉(zhuǎn)變成名字 -A #以ASCII格式打印出所有分組,并將鏈路層的頭最小化 -b #數(shù)據(jù)鏈路層上選擇協(xié)議,包括ip/arp/rarp/ipx都在這一層 -c #指定收取數(shù)據(jù)包的次數(shù),即在收到指定數(shù)量的數(shù)據(jù)包后退出tcpdump -d #將匹配信息包的代碼以人們能夠理解的匯編格式輸出 -dd #將匹配信息包的代碼以c語言程序段的格式輸出 -ddd #將匹配信息包的代碼以十進制的形式輸出 -D #打印系統(tǒng)中所有可以監(jiān)控的網(wǎng)絡(luò)接口 -e #在輸出行打印出數(shù)據(jù)鏈路層的頭部信息 -f #將外部的Internet地址以數(shù)字的形式打印出來,即不顯示主機名 -F #從指定的文件中讀取表達式,忽略其他的表達式 -i #指定監(jiān)聽網(wǎng)絡(luò)接口 -l #使標準輸出變?yōu)榫彌_形式,可以數(shù)據(jù)導(dǎo)出到文件 -L #列出網(wǎng)絡(luò)接口已知的數(shù)據(jù)鏈路 -n #不把網(wǎng)絡(luò)地址轉(zhuǎn)換為名字 -N 不輸出主機名中的域名部分,例如www.baidu.com只輸出www -nn #不進行端口名稱的轉(zhuǎn)換 -P #不將網(wǎng)絡(luò)接口設(shè)置為混雜模式 -q #快速輸出,即只輸出較少的協(xié)議信息 -r #從指定的文件中讀取數(shù)據(jù),一般是-w保存的文件 -w #將捕獲到的信息保存到文件中,且不分析和打印在屏幕 -s #從每個組中讀取在開始的snaplen個字節(jié),而不是默認的68個字節(jié) -S #將tcp的序列號以絕對值形式輸出,而不是相對值 -T #將監(jiān)聽到的包直接解析為指定的類型的報文,常見的類型有rpc(遠程過程調(diào)用)和snmp(簡單網(wǎng)絡(luò)管理協(xié)議) -t #在輸出的每一行不打印時間戳 -tt #在每一行中輸出非格式化的時間戳 -ttt #輸出本行和前面以后之間的時間差 -tttt #在每一行中輸出data處理的默認格式的時間戳 -u #輸出未解碼的NFS句柄 -v #輸出稍微詳細的信息,例如在ip包中可以包括ttl和服務(wù)類型的信息 -vv#輸出相信的保報文信息
tcpdump的表達式:
表達式是一個正則表達式,tcpdump利用它作為過濾報文的條件,如果一個報文滿足表達式的條件,則這個報文將會被捕獲。如果沒有給出任何條件,則網(wǎng)絡(luò)上所有的信息包 將會被截獲,在表達式中一般如下幾種類型的關(guān)鍵字:
a):關(guān)于數(shù)據(jù)類型的關(guān)鍵字:
? ? 包括host、port、net,例如host 192.168.1.1表示這是一臺主機,net 192.168.0.0表示這是一個網(wǎng)絡(luò)地址,port 22指明端口號是22,如果沒有指明類型,則默認的類型是host。
b):數(shù)據(jù)傳輸方向的關(guān)鍵字:
? ? 包括src、dst、dst or src、dst and src,這些關(guān)鍵字指明了傳輸?shù)姆较颍热鐂rc 192.168.1.1說明數(shù)據(jù)包源地址是192.168.1.1,dst net 192.168.0.0指明目的網(wǎng)絡(luò)地址是192.168.0.0,默認是監(jiān)控主機對主機的src和dst,即默認監(jiān)聽本機和目標主機的所有數(shù)據(jù)。
c):協(xié)議關(guān)鍵字:
? ? 包括ip、arp、rarp、tcp、udp等,
d):其他關(guān)鍵字:
? ? 運算類型的:or、and、not、!
? ? 輔助功能型的:gateway、less、broadcast、greater
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode ##并沒有輸出詳細的信息,想看詳細的使用-v -vv listening on ens33, link-type EN10MB (Ethernet), capture size 262144 bytes ## 2847 packets captured ## 2847 packets received by filter ## 0 packets dropped by kernel
scping=subprocess.run("ping 192.168.2.132 -c 4",shell="True",stdout=subprocess.PIPE,stderr=subprocess.PIPE)
ip = subprocess.run(f"ping -c 1 -w 1 192.168.2.{i}",shell=True,stdout.subprocess.PIPE,stderr.subprocess.PIPE)
使用python掃描LAN工具:
python調(diào)用liunx的命令:
os模塊
os.mkdir("/..")
subprocess模塊
subprocess.run(args, *, stdin=None, input=None, stdout=None, stderr=None, capture_output=False, shell=False, cwd=None, timeout=None, check=False, encoding=None, errors=None, text=None, env=None, universal_newlines=None)
- args:表示要執(zhí)行的命令。必須是一個字符串,字符串參數(shù)列表。
- stdin、stdout 和 stderr:子進程的標準輸入、輸出和錯誤。其值可以是 subprocess.PIPE(保存輸入輸出)、subprocess.DEVNULL(不輸出內(nèi)容)
- timeout:設(shè)置命令超時時間。如果命令執(zhí)行時間超時,子進程將被殺死,并彈出 TimeoutExpired 異常。
- check:如果該參數(shù)設(shè)置為 True,并且進程退出狀態(tài)碼不是 0,則彈 出 CalledProcessError 異常。
?
scp=subprocess.run("ping 192.168.1.111 -c 4",shell="True",stdout=subprocess.PIPE,stderr=subprocess.PIPE,check="False") scp.returncode ##查看代碼是否執(zhí)行成功 ############################################################## #!/usr/bin/python """ # Author: lkong # Created Time : 2022-07-23 16:06:53 5 6 # File Name: scan.py 7 # Description: 8 9 """ 10 import subprocess 11 use_ip=[] 12 unuse_ip=[] 13 for i in range(1,11): 14 ip = subprocess.run(f"ping -c 1 -w 1 192.168.2.{i}",shell=True,stdout=subproc ess.PIPE,stderr=subprocess.PIPE) 15 if ip.returncode == 0: 16 use_ip.append(f'192.168.2.{i}') 17 else: 18 unuse_ip.append(f'192.168.2.{i}') 19 20 print(f'正在使用的代碼如下:\n{use_ip}') 21 print(f'沒有使用的代碼如下:\n{unuse_ip}')?
查看liunx系統(tǒng)里面的協(xié)議和其端口
dns---》arp(域名解析得到IP地址后就地址解析得到mac地址)
arp協(xié)議
地址解析協(xié)議:沒有對應(yīng)端口號,工作在網(wǎng)絡(luò)層,ip--》mac
arp緩存表在pc機和交換機上面
arp在工作的時候有兩種類型的包
- arp request
- arp response
封裝的角度去理解(PC機,交換機,路由器)
源IP地址和目的地址
arp封裝之后:
然后進行arp廣播
交換機會幫我們進行轉(zhuǎn)發(fā)
得到的arp response包
arp病毒:
不斷給交換機發(fā)送錯誤的arp response包
解決辦法:靜態(tài)綁定ip和mac地址就不會被干擾了
arp -s ip mac
pc機:火絨
ICMP協(xié)議:
互聯(lián)網(wǎng)消息控制協(xié)議:網(wǎng)絡(luò)通不通,主機是否可達,路由是否可用,用來探路的
ping:-s數(shù)據(jù)包大?。?c數(shù)量;-i時間間隔;-w超時時間
看網(wǎng)絡(luò)質(zhì)量:packet loss丟包率,time,ping的時間
如果ping不通可能有什么原因:
ip配置錯誤,沒有寫網(wǎng)關(guān)
或者路由器問題(ping百度,如果可以ping通,說明沒有問題)
是不是對方服務(wù)器問題,可以用別的機器ping對方服務(wù)器,如果正常說明對方服務(wù)器沒有問題
用tcpdump抓包看是否有接收到包,如果可以就說明機器可以接收到,看防火墻有沒有組織
對方服務(wù)器去ping百度
ddos攻擊:
DDOS是指拒絕服務(wù)攻擊,亦稱洪水攻擊,是一種網(wǎng)絡(luò)攻擊手法,其目的在于使目標計算機的網(wǎng)絡(luò)或系統(tǒng)資源耗盡,使服務(wù)暫時中斷或停止,導(dǎo)致其正常用戶無法訪問。當黑客使用網(wǎng)絡(luò)上兩個或以上被攻陷的計算機作為“僵尸”向特定的目標發(fā)動“拒絕服務(wù)”式攻擊時,稱為分布式拒絕服務(wù)攻擊。
攻擊方式:
DDOS攻擊可以具體分成兩種形式:帶寬消耗型以及資源消耗型。它們都是透過大量合法或偽造的請求占用大量網(wǎng)絡(luò)以及器材資源,以達到癱瘓網(wǎng)絡(luò)以及系統(tǒng)的目的。
解決辦法(燒錢):
DOS攻擊:封ip地址文章來源:http://www.zghlxwxcb.cn/news/detail-449916.html
DDOS攻擊:大多數(shù)完成注冊的域名需要兩個DNS服務(wù)器,但這遠遠不夠。你要確保你的DNS服務(wù)器以及你的網(wǎng)站和其他資源都處于負載均衡的保護狀態(tài)下。你也可以使用一些公司提供的冗余DNS。比如,有很多人使用內(nèi)容分發(fā)網(wǎng)絡(luò)(分布式的狀態(tài))給客戶發(fā)送文件,這是一種很好的抵御DDoS攻擊的方法。若你需要,也有很多公司提供了這種增強DNS的保護措施。文章來源地址http://www.zghlxwxcb.cn/news/detail-449916.html
到了這里,關(guān)于計算機網(wǎng)絡(luò)(4)傳輸層的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!