linux使用进程抓包,netstat、Linux下抓包
1、netstat 命令
netstat 是在內(nèi)核中訪問網(wǎng)絡(luò)連接狀態(tài)及其相關(guān)信息的程序,它能提供TCP連接,TCP和UDP監(jiān)聽,進程內(nèi)存管理的相關(guān)報告。
netstat 是控制臺命令,是一個監(jiān)控TCP/IP網(wǎng)絡(luò)的非常有用的工具,它可以顯示路由表、實際的網(wǎng)絡(luò)連接以及每一個網(wǎng)絡(luò)接口設(shè)備的狀態(tài)信息。netstat用于顯示與IP、TCP、UDP和ICMP協(xié)議相關(guān)的統(tǒng)計數(shù)據(jù),一般用于檢驗本機各端口的網(wǎng)絡(luò)連接情況。
如果你的計算機有時候接收到的數(shù)據(jù)包導(dǎo)致出錯數(shù)據(jù)或故障,你不必感到奇怪,TCP/IP可以容許這些類型的錯誤,并能夠自動重發(fā)數(shù)據(jù)包。但如果累計的出錯情況數(shù)目占到所接收的IP數(shù)據(jù)報相當(dāng)大的百分比,或者它的數(shù)目正迅速增加,那么你就應(yīng)該使用netstat查一查為什么會出現(xiàn)這些情況了。
netstat 命令的功能是顯示網(wǎng)絡(luò)連接、路由表和網(wǎng)絡(luò)接口信息,可以讓用戶得知有哪些網(wǎng)絡(luò)連接正在運作。使用時如果不帶參數(shù),netstat顯示活動的 TCP 連接。
netstat 命令用來打印網(wǎng)絡(luò)連接狀況、系統(tǒng)所開放端口、路由表等信息。最常用的關(guān)于netstat的命令就是這個 netstat -lnp (查看當(dāng)前系統(tǒng)啟動哪些端口)以及 netstat -an (查看網(wǎng)絡(luò)連接狀況)這兩個命令非常有用。
正常情況下,一臺機器是沒有任何的端口監(jiān)聽,也就意味著它沒有辦法和其他的機器通信。要想提供web服務(wù),讓其他人訪問服務(wù)器和網(wǎng)站,就需要監(jiān)聽一個端口。那么怎么查看監(jiān)聽端口?輸入命令 netstat -lnp ,回車,見下圖,
重點關(guān)注上圖紅色框框的內(nèi)容,顯示監(jiān)聽了哪些端口,后面會經(jīng)常用到這個命令。tcp和udp,最好網(wǎng)上查查他們倆的意思,做個了解。
tcp 百度百科 https://baike.baidu.com/item/TCP/33012?fr=aladdin
dup 百度百科 https://baike.baidu.com/item/UDP/571511?fr=aladdin
除了 tcp 和 dup ,還有 unix ,之前說過 socket 文件,說的是同一臺服務(wù)器,兩個進程之前互相通信使用 socket 文件。
只查看tcp和udp的命令,見下圖,
還有一個命令,輸入 netstat -an ,回車,見下圖,
內(nèi)容較多,沒有一一截圖。這個命令涉及擴展知識,叫TCP/IP的“三次握手,四次揮手”。“三次握手,四次揮手”是重點。
上圖中常見狀態(tài)即連接狀態(tài)。在原模式中沒有狀態(tài),在用戶數(shù)據(jù)報協(xié)議中也經(jīng)常沒有狀態(tài),于是狀態(tài)列可以空出來。若有狀態(tài),通常取值為:
LISTEN
偵聽來自遠方的TCP端口的連接請求
SYN-SENT
在發(fā)送連接請求后等待匹配的連接請求
SYN-RECEIVED
在收到和發(fā)送一個連接請求后等待對方對連接請求的確認
ESTABLISHED
代表一個打開的連接,表示正在通信。這個數(shù)值需要關(guān)注,如果很大的話,說明系統(tǒng)現(xiàn)在很忙。通常情況下,1000以內(nèi),服務(wù)器都是可以接受的。
FIN-WAIT-1
等待遠程TCP連接中斷請求,或先前的連接中斷請求的確認
FIN-WAIT-2
從遠程TCP等待連接中斷請求
CLOSE-WAIT
等待從本地用戶發(fā)來的連接中斷請求
CLOSING
等待遠程TCP對連接中斷的確認
LAST-ACK
等待原來的發(fā)向遠程TCP的連接中斷請求的確認
TIME-WAIT
等待足夠的時間以確保遠程TCP接收到連接中斷請求的確認
CLOSED
沒有任何連接狀態(tài)
分享一個小技巧,可以查看所有的狀態(tài)的數(shù)字,輸入命令 netstat -an | awk ‘/^tcp/ {++sta[$NF]} END {for(key in sta) print key, "\t", sta[key]}‘ ,回車,見下圖,
我的虛擬機上的狀態(tài)比較少,顯示為 LISTEN 4個,ESTABLISHED 1個。
還有一個命令 ss ,它與 netstat 類似,見下圖,
內(nèi)容較多,不一一截圖。ss -an 也能夠查看狀態(tài),想單獨查看某一個狀態(tài)的話,輸入命令 ss -an | grep -i listen,回車,見下圖,
這個命令有個缺點,不會顯示進程的名字,netstat 命令就可以。
2、Linux 下抓包
TcpDump可以將網(wǎng)絡(luò)中傳送的數(shù)據(jù)包完全截獲下來提供分析。它支持針對網(wǎng)絡(luò)層、協(xié)議、主機、網(wǎng)絡(luò)或端口的過濾,并提供and、or、not等邏輯語句來幫助你去掉無用的信息。
Linux作為網(wǎng)絡(luò)服務(wù)器,特別是作為路由器和網(wǎng)關(guān)時,數(shù)據(jù)的采集和分析是不可少的。TcpDump是Linux中強大的網(wǎng)絡(luò)數(shù)據(jù)采集分析工具之一。
用簡單的話來定義tcpdump,就是:dump the traffic on a network,根據(jù)使用者的定義對網(wǎng)絡(luò)上的數(shù)據(jù)包進行截獲的包分析工具。
作為互聯(lián)網(wǎng)上經(jīng)典的的系統(tǒng)管理員必備工具,tcpdump以其強大的功能,靈活的截取策略,成為每個高級的系統(tǒng)管理員分析網(wǎng)絡(luò),排查問題等所必備的工具之一。
tcpdump提供了源代碼,公開了接口,因此具備很強的可擴展性,對于網(wǎng)絡(luò)維護和入侵者都是非常有用的工具。tcpdump存在于基本的 FreeBSD系統(tǒng)中,由于它需要將網(wǎng)絡(luò)接口設(shè)置為混雜模式,普通用戶不能正常執(zhí)行,但具備root權(quán)限的用戶可以直接執(zhí)行它來獲取網(wǎng)絡(luò)上的信息。因此系統(tǒng)中存在網(wǎng)絡(luò)分析工具主要不是對本機安全的威脅,而是對網(wǎng)絡(luò)上的其他計算機的安全存在威脅。
基本上tcpdump的總的輸出格式為:系統(tǒng)時間 來源主機.端口 > 目標主機.端口 數(shù)據(jù)包參數(shù)
有時候,也許你會有這樣的需求,想看一下某個網(wǎng)卡上都有哪些數(shù)據(jù)包,尤其是當(dāng)你初步判定你的服務(wù)器上有流量攻擊。這時,使用抓包工具來抓一下數(shù)據(jù)包,就可以知道有哪些IP在攻擊你了。
如果沒有tcpdump 這個命令,需要用 yum install -y tcpdump 命令去安裝一下。見下圖,
接著執(zhí)行最簡單的用法,輸入命令 tcpdump -nn ,回車,見下圖,
出現(xiàn)上圖所示一段話,然后命令就卡著沒有動,需要使用 ctrl + c 才能結(jié)束命令。這是因為我的設(shè)備名字比較特殊,所以需要指定網(wǎng)卡的名字,使用命令 ifconfig ,見下圖,
然后輸入命令 tcpdump -nn -i ens33 ,回車,見下圖,
命令跑得非常快,需要使用 ctrl + c 來結(jié)束命令。上圖中,結(jié)果顯示出很多信息,命令這邊的 -nn 中第1個 n 表示IP用數(shù)字的形式顯示出來,如果不加就會顯示成主機名。輸入命令 tcpdump -i ens33 ,回車,見下圖,
可以看到,顯示的ip地址變成主機名了。主機名對我們來說,不知道是誰,所以還是用 -nn 查看ip地址比較直觀。我們自己的主機名上的 .ssh 意思是ssh服務(wù)的端口 22 ,知道 22 的話就還好,不知道的話,就不知道是誰了。
上上圖中第1列是時間,第2列是IP,第3列顯示的是原IP.原端口,> 是一個方向表示到哪里去,第4列顯示的信息是現(xiàn)在的IP和端口,后面的信息是該數(shù)據(jù)包的相關(guān)信息。我們主要關(guān)注的是IP地址和端口這兩列。認真看的話,會發(fā)現(xiàn)這兩列IP地址是一對一對,而且互相發(fā)送信息。
tcpdump 查看的就是數(shù)據(jù)的流向。
也可以指定端口查看,來看一下123端口的,輸入命令 tcpdump -nn -i ens33 port 123 ,回車,見下圖,
結(jié)果就只有端口123的出來,當(dāng)然也有排除的命令,輸入 tcpdump -nn -i ens33 not port 22 ,回車,見下圖,
還可以加入條件,輸入命令 tcpdump -nn -i ens33 not port 22 and host 192.168.218.128 ,回車,見下圖,
還可以指定數(shù)據(jù)包的長度和個數(shù),見下圖,
上圖中的10就表示個數(shù),還可以指定存放的文件,文件名隨便取,見下圖,
這邊取包會需要點時間,不是卡住了,耐心等一會就會有結(jié)果的。最終寫出的文件,可以進入查看,輸入命令 file /tmp/1.cap ,回車,見下圖,
這個文件無法用 cat 命令查看,結(jié)果會出現(xiàn)一堆亂碼,可以使用 file 命令查看一下大致信息,也可以使用 tcpdump 命令查看,需要加上 -r ,見下圖,
結(jié)果就是一些數(shù)據(jù)流。
接著分享一個命令 tshark ,需要先安裝一個工具,見下圖,
安裝完畢,往下操作,輸入命令 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" ,回車,見下圖,
可以查看指定網(wǎng)卡,80端口的一個web端口訪問的情況,虛擬機是查不到情況的,因為沒有任何的80端口在監(jiān)聽,沒有提供web服務(wù)。所以上圖沒有結(jié)果,看不到效果,但是需要記住這個命令。這個命令的結(jié)果類似于web的訪問日志,包含時間、IP地址、訪問的域名,鏈接等信息。
總結(jié):netstat -lnp 查看當(dāng)前系統(tǒng)啟動哪些端口netstat -an 查看網(wǎng)絡(luò)連接狀況netstat -ltnp 查看當(dāng)前系統(tǒng)啟動的tcp端口netstat -lunp 查看當(dāng)前系統(tǒng)啟動的udp端口netstat -ltunp 查看當(dāng)前系統(tǒng)啟動的tcp和udp端口netstat -an | awk ‘/^tcp/ {++sta[$NF]} END {for(key in sta) print key, "\t", sta[key]}‘ 可以查看所有的狀態(tài)的數(shù)字。課件地址在 centos7.aminglinux.com ss -an 與 netstat 異曲同工,都是查看狀態(tài)的,不過它不會顯示進程的名字ss -an | grep -i listen 查看狀態(tài)為 listen 的情況tcpdump -nn -i ens33 查看數(shù)據(jù)的流向,可查看ip地址和端口tcpdump -i ens33 不加-nn查看主機名,沒有ip地址和端口tcpdump -nn -i ens33 port 123 查看指定端口123的數(shù)據(jù)流向tcpdump -nn -i ens33 not port 22 查看非指定端口22的數(shù)據(jù)流向tcpdump -nn -i ens33 not port 22 and host 192.168.218.128 查看非指定端口22和ip地址是 192.168.218.128 的數(shù)據(jù)流向tcpdump -nn -i ens33 -c 10 查看10個數(shù)據(jù)的流向tcpdump -nn -i ens33 -c 10 -w /tmp/1.cap 查看10個數(shù)據(jù)的流向并且指定存放的路徑/tmp/1.cap tcpdump -r /tmp/1.cap 查看數(shù)據(jù)存放的文件
總結(jié)
以上是生活随笔為你收集整理的linux使用进程抓包,netstat、Linux下抓包的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux抓包操作,linux/wind
- 下一篇: 碰到 oracle 10g ORA-0