1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        運(yùn)維工程師必備:請(qǐng)收好 Linux 網(wǎng)絡(luò)命令集錦

        共 4767字,需瀏覽 10分鐘

         ·

        2020-08-04 19:22



        點(diǎn)擊「閱讀原文」查看良許原創(chuàng)精品視頻。


        看著 kali linux 上百個(gè)網(wǎng)絡(luò)命令,我陷入了沉思。專業(yè)的網(wǎng)絡(luò)命令實(shí)在是太多了,如果要羅列,上千個(gè)也是有的。個(gè)人不是滲透測(cè)試工作者,大部分功能只知皮毛。所以本文是非常淺顯的技術(shù)總結(jié),僅聚焦工作中常用到的一些 Linux 命令。
        由于nio的普及,ck10k的問(wèn)題已經(jīng)成為過(guò)去式?,F(xiàn)在隨便一臺(tái)服務(wù)器,就可以支持?jǐn)?shù)十萬(wàn)級(jí)別的連接了。那么我們來(lái)算一下,100萬(wàn)的連接需要多少資源。
        首先,每一個(gè)連接都是文件句柄,所以需要文件描述符數(shù)量支持才行,每一個(gè)socket內(nèi)存占用15k-20k之間,這樣,僅維護(hù)相應(yīng) socket,就需要20G內(nèi)存;而廣播一個(gè)1KB的消息需要占用的帶寬為1000M!

        查看當(dāng)前系統(tǒng)的連接

        如何看當(dāng)前系統(tǒng)有多少連接呢?可以使用netstat結(jié)合awk進(jìn)行統(tǒng)計(jì)。如下腳本,統(tǒng)計(jì)了每一種狀態(tài)的tcp連接數(shù)量
        # netstat -antp | awk '{a[$6]++}END{ for(x in a)print x,a[x]}'LISTEN 41CLOSE_WAIT 24ESTABLISHED 150Foreign 1TIME_WAIT 92


        但如果你在一臺(tái)有上萬(wàn)連接的服務(wù)器上執(zhí)行這個(gè)命令,你可能會(huì)等上很長(zhǎng)時(shí)間。所以,我們有了第二代網(wǎng)絡(luò)狀態(tài)統(tǒng)計(jì)工具:netstat => ss
        # ss -sTotal: 191 (kernel 220)TCP:   5056 (estab 42, closed 5000, orphaned 3, synrecv 0, timewait 5000/0), ports 3469...


        netstat屬于net-tools工具集,而ss屬于iproute。其命令對(duì)應(yīng)如下,是時(shí)候和 net-tools 說(shuō) Bye 了。

        ss命令

        基本使用

        我們按照使用場(chǎng)景來(lái)看下ss的用法。

        查看系統(tǒng)正在監(jiān)聽的tcp連接

        ss -atr ss -atn #僅ip

        查看系統(tǒng)中所有連接

        ss -alt

        查看監(jiān)聽444端口的進(jìn)程 pid


        ss -ltp | grep 444


        查看進(jìn)程555占用了哪些端口

        ss -ltp | grep 555

        顯示所有 UDP 連接

        ss -u -a
        • 查看TCP sockets,使用-ta選項(xiàng)

        • 查看UDP sockets,使用-ua選項(xiàng)

        • 查看RAW sockets,使用-wa選項(xiàng)

        • 查看UNIX sockets,使用-xa選項(xiàng)

        和某個(gè) IP 的所有連接

        ss dst 10.66.224.130ss dst 10.66.224.130:httpss dst 10.66.224.130:smtpss dst 10.66.224.130:443

        顯示所有的 HTTP 連接

        ss  dport = :http

        查看連接本機(jī)最多的前 10 個(gè) IP 地址

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

        Recv-Q 和 Send-Q

        注意ss的執(zhí)行結(jié)果,我們說(shuō)明一下Recv-Q和Send-Q。


        這兩個(gè)值,在LISTEN和ESTAB狀態(tài)分別代表不同意義。一般,正常的應(yīng)用程序這兩個(gè)值都應(yīng)該為0(backlog除外)。數(shù)值越大,說(shuō)明問(wèn)題越嚴(yán)重。

        LISTEN 狀態(tài)

        • Recv-Q:代表建立的連接還有多少?zèng)]有被accept,比如Nginx接受新連接變的很慢

        • Send-Q:代表listen backlog值

        ESTAB 狀態(tài)

        • Recv-Q:內(nèi)核中的數(shù)據(jù)還有多少(bytes)沒(méi)有被應(yīng)用程序讀取,發(fā)生了一定程度的阻塞

        • Send-Q:代表內(nèi)核中發(fā)送隊(duì)列里還有多少(bytes)數(shù)據(jù)沒(méi)有收到ack,對(duì)端的接收處理能力不強(qiáng)

        查看網(wǎng)絡(luò)流量

        查看流量


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


        watch cat /proc/net/dev

        查看占流量最大的 IP


        有時(shí)候我們發(fā)現(xiàn)網(wǎng)絡(luò)帶寬占用非常高,但我們無(wú)法判斷到底流量來(lái)自哪里。這時(shí)候,iftop就可以幫上忙了。如圖,可以很容易的找出流量來(lái)自哪臺(tái)主機(jī)。



        當(dāng)你不確定內(nèi)網(wǎng)的流量來(lái)源,比如有人在壓測(cè),api調(diào)用不合理等,都可以通過(guò)這種方法找到他。

        抓包

        tcpdump


        當(dāng)我們需要判斷是否有流量,或者調(diào)試一個(gè)難纏的 netty 應(yīng)用問(wèn)題,則可以通過(guò)抓包的方式去進(jìn)行進(jìn)一步的判斷。在 Linux 上,可以通過(guò) tcpdump 命令抓取數(shù)據(jù),然后使用Wireshark 進(jìn)行分析。


        tcpdump -i eth0 -nn -s0 -v port 80
        • -i 指定網(wǎng)卡進(jìn)行抓包

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

        • -nn 兩個(gè)n表示端口也是數(shù)字,否則解析成服務(wù)名

        • -s 設(shè)置抓包長(zhǎng)度,0表示不限制

        • -v 抓包時(shí)顯示詳細(xì)輸出,-vv、-vvv依次更加詳細(xì)

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


        tcpdump -A -s0 port 80


        2)抓取特定 IP 的相關(guān)包

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

        3)-w參數(shù)將抓取的包寫入到某個(gè)文件中

        tcpdump -i eth0 -s0 -w test.pcap

        4)tcpdump支持表達(dá)式,還有更加復(fù)雜的例子,比如抓取系統(tǒng)中的get,post請(qǐng)求(非https)

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

        更多參見
        https://hackertarget.com/tcpdump-examples/

        抓取的數(shù)據(jù),使用 wireshark 查看即可。

        HTTP 抓包

        抓包工具將自身當(dāng)作代理,能夠抓取你的瀏覽器到服務(wù)器之間的通訊,并提供修改、重放、批量執(zhí)行的功能。是發(fā)現(xiàn)問(wèn)題,分析協(xié)議,攻擊站點(diǎn)的利器。常用的有以下三款:
        • Burpsuite (跨平臺(tái))

        • Fiddle2 (Win)

        • Charles (Mac)

        流量復(fù)制

        你可能需要使你的生產(chǎn)環(huán)境HTTP真實(shí)流量在開發(fā)環(huán)境或者預(yù)演環(huán)境重現(xiàn),這樣就用到了流量復(fù)制功能。

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

        • Gor

        • TCPReplay

        • TCPCopy

        連接數(shù)過(guò)多問(wèn)題


        根據(jù)TCP/IP介紹,socket大概包含10個(gè)連接狀態(tài)。我們平常工作中遇到的,除了針對(duì)SYN的拒絕服務(wù)攻擊,如果有異常,大概率是TIME_WAIT和CLOSE_WAIT的問(wèn)題。
        TIME_WAIT一般通過(guò)優(yōu)化內(nèi)核參數(shù)能夠解決;CLOSE_WAIT一般是由于程序編寫不合理造成的,更應(yīng)該引起開發(fā)者注意。

        TIME_WAIT

        TIME_WAIT 是主動(dòng)關(guān)閉連接的一方保持的狀態(tài),像 nginx、爬蟲服務(wù)器,經(jīng)常發(fā)生大量處于time_wait狀態(tài)的連接。TCP 一般在主動(dòng)關(guān)閉連接后,會(huì)等待 2MS,然后徹底關(guān)閉連接。由于 HTTP 使用了 TCP 協(xié)議,所以在這些頻繁開關(guān)連接的服務(wù)器上,就積壓了非常多的 TIME_WAIT 狀態(tài)連接。
        某些系統(tǒng)通過(guò) dmesg 可以看到以下信息。


        __ratelimit: 2170 callbacks suppressedTCP: time wait bucket table overflowTCP: time wait bucket table overflowTCP: time wait bucket table overflowTCP: time wait bucket table overflow

        通過(guò)ss -s命令查看,可以看到timewait已經(jīng)有2w個(gè)了。


        ss -sTotal: 174 (kernel 199)TCP:   20047 (estab 32, closed 20000, orphaned 4, synrecv 0, timewait 20000/0), ports 10785
        sysctl 命令可以設(shè)置這些參數(shù),如果想要重啟生效的話,加入/etc/sysctl.conf文件中。
        # 修改閾值net.ipv4.tcp_max_tw_buckets = 50000# 表示開啟TCP連接中TIME-WAIT sockets的快速回收net.ipv4.tcp_tw_reuse = 1#啟用timewait 快速回收。這個(gè)一定要開啟,默認(rèn)是關(guān)閉的。net.ipv4.tcp_tw_recycle= 1   # 修改系統(tǒng)默認(rèn)的TIMEOUT時(shí)間,默認(rèn)是60snet.ipv4.tcp_fin_timeout = 10


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

        CLOSE_WAIT

        CLOSE_WAIT一般是由于對(duì)端主動(dòng)關(guān)閉,而我方?jīng)]有正確處理的原因引起的。說(shuō)白了,就是程序?qū)懙挠袉?wèn)題,屬于危害比較大的一種。

        我們拿”csdn 諧音太郎”遇到的一個(gè)典型案例來(lái)說(shuō)明。


        代碼是使用HttpClient的一個(gè)使用片段。在這段代碼里,通過(guò)調(diào)用in.close()來(lái)進(jìn)行連接資源的清理。但可惜的是,代碼中有一個(gè)判斷:非200狀態(tài)的連接直接返回null。在這種情況下,in連賦值的機(jī)會(huì)都沒(méi)有,當(dāng)然也就無(wú)法關(guān)閉,然后就發(fā)生了連接泄漏。
        所以,HttpClient的正確關(guān)閉方式是使用其api:abort()。

        其他常用命令

        應(yīng)用軟件

        # 斷點(diǎn)續(xù)傳下載文件wget -c $url# 下載整站wget -r -p -np -k $url# 發(fā)送網(wǎng)絡(luò)連接(常用)curl -XGET $url# 傳輸文件scpsftp# 數(shù)據(jù)鏡像備份rsync

        檢測(cè)工具

        # 連通性檢測(cè)ping google.com# 到對(duì)端路由檢測(cè)tracepath google.com# 域名檢測(cè)dig google.comnslookup google.com# 網(wǎng)絡(luò)掃描工具nmap# 壓力測(cè)試iperf# 全方位監(jiān)控工具(好東西)nmon

        配置工具

        # 停止某個(gè)網(wǎng)卡ifdown# 開啟某個(gè)網(wǎng)卡ifup# 多功能管理工具ethtool

        壓力測(cè)試

        wrkabwebbenchhttp_load

        多功能工具

        # 遠(yuǎn)程登錄telnetsshnc# 防火墻iptables -L

        結(jié)尾


        除了基本的工具,本文提到的很多網(wǎng)絡(luò)命令,都不是預(yù)裝的,需要使用yum自行安裝。網(wǎng)絡(luò)編程方面的學(xué)習(xí),我覺(jué)得,讀一下《TCP/IP詳解 卷1:協(xié)議》這本書,然后寫幾個(gè)Netty應(yīng)用就可以了。
        NIO我們已經(jīng)在I/O篇提起了,在此不再做詳細(xì)介紹。等你碰到所謂的拆包粘包問(wèn)題,遇到心跳和限流問(wèn)題,甚至遇到了流量整形問(wèn)題,那么證明你離一個(gè)專業(yè)的網(wǎng)絡(luò)編程程序員越來(lái)越近了。


        良許個(gè)人微信


        添加良許個(gè)人微信即送3套程序員必讀資料


        → 精選技術(shù)資料共享

        → 高手如云交流社群





        本公眾號(hào)全部博文已整理成一個(gè)目錄,請(qǐng)?jiān)诠娞?hào)里回復(fù)「m」獲??!

        推薦閱讀:

        想自己搭建服務(wù)器,永久運(yùn)行網(wǎng)站?一個(gè)U盤大小的樹莓派就夠了!

        CPU 明明 8 個(gè)核,網(wǎng)卡為啥拼命折騰 1 號(hào)核?

        “kill -9”一時(shí)爽,秋后算賬淚兩行


        5T技術(shù)資源大放送!包括但不限于:C/C++,Linux,Python,Java,PHP,人工智能,單片機(jī),樹莓派,等等。在公眾號(hào)內(nèi)回復(fù)「1024」,即可免費(fèi)獲?。?!


        瀏覽 22
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        評(píng)論
        圖片
        表情
        推薦
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            亚洲开心网 | 俺爱搞 | 特级毛片av | 免费看操逼片 | 囯产精品久久久久久久久久久久久久 | 国内精品成人 | 蜜臀国产精品 | 男生的j插入女生的p | 日韩无码黄色视频 | 天天曰天天干天天射Av |