久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

Linux 網絡命令具體有哪些呢

145次閱讀
沒有評論

共計 4337 個字符,預計需要花費 11 分鐘才能閱讀完成。

這篇文章給大家介紹 Linux 網絡命令具體有哪些呢,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。

 

看著 kali linux 上百個網絡命令,我陷入了沉思。專業的網絡命令實在是太多了,如果要羅列,上千個也是有的。個人不是滲透測試工作者,大部分功能只知皮毛。所以本文是非常淺顯的技術總結,僅聚焦工作中常用到的一些 Linux 命令。

由于 nio 的普及,ck10k 的問題已經成為過去式。現在隨便一臺服務器,就可以支持數十萬級別的連接了。那么我們來算一下,100 萬的連接需要多少資源。

首先,每一個連接都是文件句柄,所以需要文件描述符數量支持才行,每一個 socket 內存占用 15k-20k 之間,這樣,僅維護相應 socket,就需要 20G 內存;而廣播一個 1KB 的消息需要占用的帶寬為 1000M!

查看當前系統的連接

如何看當前系統有多少連接呢?可以使用 netstat 結合 awk 進行統計。如下腳本,統計了每一種狀態的 tcp 連接數量

# netstat -antp | awk  {a[$6]++}END{ for(x in a)print x,a[x]}  LISTEN 41 CLOSE_WAIT 24 ESTABLISHED 150 Foreign 1 TIME_WAIT 92

但如果你在一臺有上萬連接的服務器上執行這個命令,你可能會等上很長時間。所以,我們有了第二代網絡狀態統計工具:netstat = ss。

# ss -s Total: 191 (kernel 220) TCP: 5056 (estab 42, closed 5000, orphaned 3, synrecv 0, timewait 5000/0), ports 3469 ...

netstat 屬于 net-tools 工具集,而 ss 屬于 iproute。其命令對應如下,是時候和 net-tools 說 Bye 了。

ss 命令

基本使用

我們按照使用場景來看下 ss 的用法。

查看系統正在監聽的 tcp 連接

ss -atr ss -atn # 僅 ip

查看系統中所有連接

ss -alt

查看監聽 444 端口的進程 pid

ss -ltp | grep 444

查看進程 555 占用了哪些端口

ss -ltp | grep 555

顯示所有 UDP 連接

ss -u -a

查看 TCP sockets,使用 -ta 選項

查看 UDP sockets,使用 -ua 選項

查看 RAW sockets,使用 -wa 選項

查看 UNIX sockets,使用 -xa 選項

和某個 IP 的所有連接

ss dst 10.66.224.130 ss dst 10.66.224.130:http ss dst 10.66.224.130:smtp ss dst 10.66.224.130:443

顯示所有的 HTTP 連接

ss dport = :http

查看連接本機最多的前 10 個 IP 地址

netstat -antp | awk  {print $4}  | cut -d  :  -f1 | sort | uniq -c | sort -n -k1 -r | head -n 10

Recv-Q 和 Send-Q

注意 ss 的執行結果,我們說明一下 Recv- Q 和 Send-Q。

這兩個值,在 LISTEN 和 ESTAB 狀態分別代表不同意義。一般,正常的應用程序這兩個值都應該為 0(backlog 除外)。數值越大,說明問題越嚴重。

LISTEN 狀態

Recv-Q:代表建立的連接還有多少沒有被 accept,比如 Nginx 接受新連接變的很慢

Send-Q:代表 listen backlog 值

ESTAB 狀態

Recv-Q:內核中的數據還有多少 (bytes) 沒有被應用程序讀取,發生了一定程度的阻塞

Send-Q:代表內核中發送隊列里還有多少 (bytes) 數據沒有收到 ack,對端的接收處理能力不強

查看網絡流量

查看流量

有很多工具可以看網絡流量,但我最喜歡 sar。sar 是 linux 上功能最全的監控軟件。如圖,使用 sar -n DEV 1 即可每秒刷新一次網絡流量。

watch cat /proc/net/dev

查看占流量最大的 IP

有時候我們發現網絡帶寬占用非常高,但我們無法判斷到底流量來自哪里。這時候,iftop 就可以幫上忙了。如圖,可以很容易的找出流量來自哪臺主機。

當你不確定內網的流量來源,比如有人在壓測,api 調用不合理等,都可以通過這種方法找到他。

抓包

tcpdump

當我們需要判斷是否有流量,或者調試一個難纏的 netty 應用問題,則可以通過抓包的方式去進行進一步的判斷。在 Linux 上,可以通過 tcpdump 命令抓取數據,然后使用 Wireshark 進行分析。

tcpdump -i eth0 -nn -s0 -v port 80

-i 指定網卡進行抓包

-n 和 ss 一樣,表示不解析域名

-nn 兩個 n 表示端口也是數字,否則解析成服務名

-s 設置抓包長度,0 表示不限制

-v 抓包時顯示詳細輸出,-vv、-vvv 依次更加詳細

1)加入 - A 選項將打印 ascii,- X 打印 hex 碼。

tcpdump -A -s0 port 80

2)抓取特定 IP 的相關包

tcpdump -i eth0 host 10.10.1.1 tcpdump -i eth0 dst 10.10.1.20

3)- w 參數將抓取的包寫入到某個文件中

tcpdump -i eth0 -s0 -w test.pcap

4)tcpdump 支持表達式,還有更加復雜的例子,比如抓取系統中的 get,post 請求(非 https)

tcpdump -s 0 -v -n -l | egrep -i  POST /|GET /|Host:

更多參見

https://hackertarget.com/tcpdump-examples/

抓取的數據,使用 wireshark 查看即可。

HTTP 抓包

抓包工具將自身當作代理,能夠抓取你的瀏覽器到服務器之間的通訊,并提供修改、重放、批量執行的功能。是發現問題,分析協議,攻擊站點的利器。常用的有以下三款:

Burpsuite(跨平臺)

Fiddle2 (Win)

Charles (Mac)

流量復制

你可能需要使你的生產環境 HTTP 真實流量在開發環境或者預演環境重現,這樣就用到了流量復制功能。

有三個工具可供選擇,個人傾向于 Gor。

Gor

TCPReplay

TCPCopy

連接數過多問題

根據 TCP/IP 介紹,socket 大概包含 10 個連接狀態。我們平常工作中遇到的,除了針對 SYN 的拒絕服務攻擊,如果有異常,大概率是 TIME_WAIT 和 CLOSE_WAIT 的問題。

TIME_WAIT 一般通過優化內核參數能夠解決;CLOSE_WAIT 一般是由于程序編寫不合理造成的,更應該引起開發者注意。

TIME_WAIT

TIME_WAIT 是主動關閉連接的一方保持的狀態,像 nginx、爬蟲服務器,經常發生大量處于 time_wait 狀態的連接。TCP 一般在主動關閉連接后,會等待 2MS,然后徹底關閉連接。由于 HTTP 使用了 TCP 協議,所以在這些頻繁開關連接的服務器上,就積壓了非常多的 TIME_WAIT 狀態連接。

某些系統通過 dmesg 可以看到以下信息。

__ratelimit: 2170 callbacks suppressed TCP: time wait bucket table overflow TCP: time wait bucket table overflow TCP: time wait bucket table overflow TCP: time wait bucket table overflow

通過 ss - s 命令查看,可以看到 timewait 已經有 2w 個了。

ss -s Total: 174 (kernel 199) TCP: 20047 (estab 32, closed 20000, orphaned 4, synrecv 0, timewait 20000/0), ports 10785

sysctl 命令可以設置這些參數,如果想要重啟生效的話,加入 /etc/sysctl.conf 文件中。

#  修改閾值  net.ipv4.tcp_max_tw_buckets = 50000 #  表示開啟 TCP 連接中 TIME-WAIT sockets 的快速回收  net.ipv4.tcp_tw_reuse = 1 # 啟用 timewait  快速回收。這個一定要開啟,默認是關閉的。net.ipv4.tcp_tw_recycle= 1 #  修改系統默認的 TIMEOUT 時間, 默認是 60s net.ipv4.tcp_fin_timeout = 10

測試參數的話,可以使用 sysctl -w net.ipv4.tcp_tw_reuse = 1 這樣的命令。如果是寫入進文件的,則使用 sysctl - p 生效。

CLOSE_WAIT

CLOSE_WAIT 一般是由于對端主動關閉,而我方沒有正確處理的原因引起的。說白了,就是程序寫的有問題,屬于危害比較大的一種。

我們拿”csdn 諧音太郎”遇到的一個典型案例來說明。

代碼是使用 HttpClient 的一個使用片段。在這段代碼里,通過調用 in.close()來進行連接資源的清理。但可惜的是,代碼中有一個判斷:非 200 狀態的連接直接返回 null。在這種情況下,in 連賦值的機會都沒有,當然也就無法關閉,然后就發生了連接泄漏。

所以,HttpClient 的正確關閉方式是使用其 api:abort()。

其他常用命令

應用軟件

#  斷點續傳下載文件  wget -c $url #  下載整站  wget -r -p -np -k $url #  發送網絡連接(常用) curl -XGET $url #  傳輸文件  scp sftp #  數據鏡像備份  rsync

檢測工具

#  連通性檢測  ping google.com #  到對端路由檢測  tracepath google.com #  域名檢測  dig google.com nslookup google.com #  網絡掃描工具  nmap #  壓力測試  iperf #  全方位監控工具(好東西) nmon

配置工具

#  停止某個網卡  ifdown #  開啟某個網卡  ifup #  多功能管理工具  ethtool

壓力測試

wrk ab webbench http_load

多功能工具

#  遠程登錄  telnet ssh nc #  防火墻  iptables -L

除了基本的工具,本文提到的很多網絡命令,都不是預裝的,需要使用 yum 自行安裝。

關于 Linux 網絡命令具體有哪些呢就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

正文完
 
丸趣
版權聲明:本站原創文章,由 丸趣 2023-08-25發表,共計4337字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網絡搜集發布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 明水县| 新津县| 沙洋县| 新乐市| 嘉禾县| 无棣县| 宁都县| 凤城市| 平山县| 新兴县| 九江县| 兴海县| 重庆市| 鄂伦春自治旗| 莎车县| 凤山县| 天气| 广元市| 澳门| 炎陵县| 盘山县| 台山市| 白银市| 广宗县| 仁化县| 治多县| 乐东| 胶州市| 秭归县| 卢氏县| 泗水县| 佳木斯市| 盘山县| 留坝县| 武功县| 于都县| 剑阁县| 凉城县| 咸阳市| 隆化县| 黎川县|