netstat、Linux下抓包

1、netstat 命令

netstat、Linux下抓包

netstat 是在內核中訪問網絡連接狀態及其相關信息的程序,它能提供TCP連接,TCP和UDP監聽,進程內存管理的相關報告。
netstat 是控制檯命令,是一個監控TCP/IP網絡的非常有用的工具,它可以顯示路由表、實際的網絡連接以及每一個網絡接口設備的狀態信息。netstat用於顯示與IP、TCP、UDP和ICMP協議相關的統計數據,一般用於檢驗本機各端口的網絡連接情況。
如果你的計算機有時候接收到的數據包導致出錯數據或故障,你不必感到奇怪,TCP/IP可以容許這些類型的錯誤,並能夠自動重發數據包。但如果累計的出錯情況數目佔到所接收的IP數據報相當大的百分比,或者它的數目正迅速增加,那麼你就應該使用netstat查一查爲什麼會出現這些情況了。
netstat 命令的功能是顯示網絡連接、路由表和網絡接口信息,可以讓用戶得知有哪些網絡連接正在運作。使用時如果不帶參數,netstat顯示活動的 TCP 連接。

netstat 命令用來打印網絡連接狀況、系統所開放端口、路由表等信息。最常用的關於netstat的命令就是這個 netstat -lnp (查看當前系統啓動哪些端口)以及 netstat -an (查看網絡連接狀況)這兩個命令非常有用。
正常情況下,一臺機器是沒有任何的端口監聽,也就意味着它沒有辦法和其他的機器通信。要想提供web服務,讓其他人訪問服務器和網站,就需要監聽一個端口。那麼怎麼查看監聽端口?輸入命令 netstat -lnp ,回車,見下圖,
netstat、Linux下抓包
重點關注上圖紅色框框的內容,顯示監聽了哪些端口,後面會經常用到這個命令。tcp和udp,最好網上查查他們倆的意思,做個瞭解。
tcp 百度百科 https://baike.baidu.com/item/TCP/33012?fr=aladdin
dup 百度百科 https://baike.baidu.com/item/UDP/571511?fr=aladdin
除了 tcp 和 dup ,還有 unix ,之前說過 socket 文件,說的是同一臺服務器,兩個進程之前互相通信使用 socket 文件。
只查看tcp和udp的命令,見下圖,
netstat、Linux下抓包
還有一個命令,輸入 netstat -an ,回車,見下圖,
netstat、Linux下抓包
內容較多,沒有一一截圖。這個命令涉及擴展知識,叫TCP/IP的“三次握手,四次揮手”。“三次握手,四次揮手”是重點。
上圖中常見狀態即連接狀態。在原模式中沒有狀態,在用戶數據報協議中也經常沒有狀態,於是狀態列可以空出來。若有狀態,通常取值爲:
LISTEN
偵聽來自遠方的TCP端口的連接請求
SYN-SENT
在發送連接請求後等待匹配的連接請求
SYN-RECEIVED
在收到和發送一個連接請求後等待對方對連接請求的確認
ESTABLISHED
代表一個打開的連接,表示正在通信。這個數值需要關注,如果很大的話,說明系統現在很忙。通常情況下,1000以內,服務器都是可以接受的。
FIN-WAIT-1
等待遠程TCP連接中斷請求,或先前的連接中斷請求的確認
FIN-WAIT-2
從遠程TCP等待連接中斷請求
CLOSE-WAIT
等待從本地用戶發來的連接中斷請求
CLOSING
等待遠程TCP對連接中斷的確認
LAST-ACK
等待原來的發向遠程TCP的連接中斷請求的確認
TIME-WAIT
等待足夠的時間以確保遠程TCP接收到連接中斷請求的確認
CLOSED
沒有任何連接狀態

分享一個小技巧,可以查看所有的狀態的數字,輸入命令 netstat -an | awk '/^tcp/ {++sta[$NF]} END {for(key in sta) print key, "\t", sta[key]}' ,回車,見下圖,
netstat、Linux下抓包
我的虛擬機上的狀態比較少,顯示爲 LISTEN 4個,ESTABLISHED 1個。

還有一個命令 ss ,它與 netstat 類似,見下圖,
netstat、Linux下抓包
內容較多,不一一截圖。ss -an 也能夠查看狀態,想單獨查看某一個狀態的話,輸入命令 ss -an | grep -i listen,回車,見下圖,
netstat、Linux下抓包
這個命令有個缺點,不會顯示進程的名字,netstat 命令就可以。

2、Linux 下抓包

netstat、Linux下抓包

TcpDump可以將網絡中傳送的數據包完全截獲下來提供分析。它支持針對網絡層、協議、主機、網絡或端口的過濾,並提供and、or、not等邏輯語句來幫助你去掉無用的信息。
Linux作爲網絡服務器,特別是作爲路由器和網關時,數據的採集和分析是不可少的。TcpDump是Linux中強大的網絡數據採集分析工具之一。
用簡單的話來定義tcpdump,就是:dump the traffic on a network,根據使用者的定義對網絡上的數據包進行截獲的包分析工具。
作爲互聯網上經典的的系統管理員必備工具,tcpdump以其強大的功能,靈活的截取策略,成爲每個高級的系統管理員分析網絡,排查問題等所必備的工具之一。
tcpdump提供了源代碼,公開了接口,因此具備很強的可擴展性,對於網絡維護和***者都是非常有用的工具。tcpdump存在於基本的 FreeBSD系統中,由於它需要將網絡接口設置爲混雜模式,普通用戶不能正常執行,但具備root權限的用戶可以直接執行它來獲取網絡上的信息。因此係統中存在網絡分析工具主要不是對本機安全的威脅,而是對網絡上的其他計算機的安全存在威脅。
基本上tcpdump的總的輸出格式爲:系統時間 來源主機.端口 > 目標主機.端口 數據包參數

有時候,也許你會有這樣的需求,想看一下某個網卡上都有哪些數據包,尤其是當你初步判定你的服務器上有流量***。這時,使用抓包工具來抓一下數據包,就可以知道有哪些IP在***你了。
如果沒有tcpdump 這個命令,需要用 yum install -y tcpdump 命令去安裝一下。見下圖,
netstat、Linux下抓包
接着執行最簡單的用法,輸入命令 tcpdump -nn ,回車,見下圖,
netstat、Linux下抓包
出現上圖所示一段話,然後命令就卡着沒有動,需要使用 ctrl + c 才能結束命令。這是因爲我的設備名字比較特殊,所以需要指定網卡的名字,使用命令 ifconfig ,見下圖,
netstat、Linux下抓包
然後輸入命令 tcpdump -nn -i ens33 ,回車,見下圖,
netstat、Linux下抓包
命令跑得非常快,需要使用 ctrl + c 來結束命令。上圖中,結果顯示出很多信息,命令這邊的 -nn 中第1個 n 表示IP用數字的形式顯示出來,如果不加就會顯示成主機名。輸入命令 tcpdump -i ens33 ,回車,見下圖,
netstat、Linux下抓包
可以看到,顯示的ip地址變成主機名了。主機名對我們來說,不知道是誰,所以還是用 -nn 查看ip地址比較直觀。我們自己的主機名上的 .ssh 意思是ssh服務的端口 22 ,知道 22 的話就還好,不知道的話,就不知道是誰了。
上上圖中第1列是時間,第2列是IP,第3列顯示的是原IP.原端口,> 是一個方向表示到哪裏去,第4列顯示的信息是現在的IP和端口,後面的信息是該數據包的相關信息。我們主要關注的是IP地址和端口這兩列。認真看的話,會發現這兩列IP地址是一對一對,而且互相發送信息。
tcpdump 查看的就是數據的流向。
也可以指定端口查看,來看一下123端口的,輸入命令 tcpdump -nn -i ens33 port 123 ,回車,見下圖,
netstat、Linux下抓包
結果就只有端口123的出來,當然也有排除的命令,輸入 tcpdump -nn -i ens33 not port 22 ,回車,見下圖,
netstat、Linux下抓包
還可以加入條件,輸入命令 tcpdump -nn -i ens33 not port 22 and host 192.168.218.128 ,回車,見下圖,
netstat、Linux下抓包
還可以指定數據包的長度和個數,見下圖,
netstat、Linux下抓包
上圖中的10就表示個數,還可以指定存放的文件,文件名隨便取,見下圖,
netstat、Linux下抓包
這邊取包會需要點時間,不是卡住了,耐心等一會就會有結果的。最終寫出的文件,可以進入查看,輸入命令 file /tmp/1.cap ,回車,見下圖,
netstat、Linux下抓包
這個文件無法用 cat 命令查看,結果會出現一堆亂碼,可以使用 file 命令查看一下大致信息,也可以使用 tcpdump 命令查看,需要加上 -r ,見下圖,
netstat、Linux下抓包
結果就是一些數據流。
接着分享一個命令 tshark ,需要先安裝一個工具,見下圖,
netstat、Linux下抓包
netstat、Linux下抓包
安裝完畢,往下操作,輸入命令 tshark -n -t a -R http.request -T fields -e "frame.time" -e "ip.src" -e "http.host" -e "http.request.method" -e "http.request.uri" ,回車,見下圖,
netstat、Linux下抓包
可以查看指定網卡,80端口的一個web端口訪問的情況,虛擬機是查不到情況的,因爲沒有任何的80端口在監聽,沒有提供web服務。所以上圖沒有結果,看不到效果,但是需要記住這個命令。這個命令的結果類似於web的訪問日誌,包含時間、IP地址、訪問的域名,鏈接等信息。

總結:
netstat -lnp 查看當前系統啓動哪些端口
netstat -an 查看網絡連接狀況
netstat -ltnp 查看當前系統啓動的tcp端口
netstat -lunp 查看當前系統啓動的udp端口
netstat -ltunp 查看當前系統啓動的tcp和udp端口
netstat -an | awk '/^tcp/ {++sta[$NF]} END {for(key in sta) print key, "\t", sta[key]}' 可以查看所有的狀態的數字。
課件地址在 centos7.aminglinux.com
ss -an 與 netstat 異曲同工,都是查看狀態的,不過它不會顯示進程的名字
ss -an | grep -i listen 查看狀態爲 listen 的情況
tcpdump -nn -i ens33 查看數據的流向,可查看ip地址和端口
tcpdump -i ens33 不加-nn查看主機名,沒有ip地址和端口
tcpdump -nn -i ens33 port 123 查看指定端口123的數據流向
tcpdump -nn -i ens33 not port 22 查看非指定端口22的數據流向
tcpdump -nn -i ens33 not port 22 and host 192.168.218.128 查看非指定端口22和ip地址是 192.168.218.128 的數據流向
tcpdump -nn -i ens33 -c 10 查看10個數據的流向
tcpdump -nn -i ens33 -c 10 -w /tmp/1.cap 查看10個數據的流向並且指定存放的路徑/tmp/1.cap
tcpdump -r /tmp/1.cap 查看數據存放的文件

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章