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

來(lái)自公眾號(hào):小姐姐味道
作者:小姐姐養(yǎ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ò)去式±旄牛現(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(可別和那個(gè)越獄工具搞混了)揍堰。

# 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了篡石。

用途 net-tools iproute
統(tǒng)計(jì) ifconfig ss
地址 netstat ip addr
路由 route ip route
鄰居 arp ip neigh
VPN iptunnel ip tunnel
VLAN vconfig ip link
組播 ipmaddr ip maddr

ss命令

基本使用

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

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

ss -atr ss -atn #僅ip

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

ss -alt

查看監(jiān)聽(tīng)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。

image

這兩個(gè)值霹崎,在LISTENESTAB狀態(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ò)流量曲掰。

image

當(dāng)然,你也可以使用ifstat奈辰、nload栏妖、iptraf等命令查看。然而數(shù)據(jù)來(lái)源冯挎,還是來(lái)自我們的/proc目錄

watch cat /proc/net/dev

查看占流量最大的IP

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

image

當(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ù)將抓取的包寫(xiě)入到某個(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:"

更多參見(jiàn)
https://hackertarget.com/tcpdump-examples/

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

image

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í)流量在開(kāi)發(fā)環(huán)境或者預(yù)演環(huán)境重現(xiàn)蜜葱,這樣就用到了流量復(fù)制功能。
有三個(gè)工具可供選擇耀石,個(gè)人傾向于Gor牵囤。

  • Gor

  • TCPReplay

  • TCPCopy

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

image

根據(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一般是由于程序編寫(xiě)不合理造成的,更應(yīng)該引起開(kāi)發(fā)者注意乓梨。

TIME_WAIT

TIME_WAIT是主動(dòng)關(guān)閉連接的一方保持的狀態(tài)鳖轰,像nginx、爬蟲(chóng)服務(wù)器扶镀,經(jīng)常發(fā)生大量處于time_wait狀態(tài)的連接蕴侣。TCP一般在主動(dòng)關(guān)閉連接后,會(huì)等待2MS臭觉,然后徹底關(guān)閉連接昆雀。由于HTTP使用了TCP協(xié)議,所以在這些頻繁開(kāi)關(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 # 表示開(kāi)啟TCP連接中TIME-WAIT sockets的快速回收net.ipv4.tcp_tw_reuse = 1#啟用timewait 快速回收。這個(gè)一定要開(kāi)啟退疫,默認(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 這樣的命令褒繁。如果是寫(xiě)入進(jìn)文件的亦鳞,則使用sysctl -p生效。

CLOSE_WAIT

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

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

image

代碼是使用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# 開(kāi)啟某個(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é)議》這本書(shū)剧蚣,然后寫(xiě)幾個(gè)Netty應(yīng)用就可以了支竹。

NIO我們已經(jīng)在I/O篇提起了,在此不再做詳細(xì)介紹鸠按。等你碰到所謂的拆包粘包問(wèn)題礼搁,遇到心跳和限流問(wèn)題,甚至遇到了流量整形問(wèn)題目尖,那么證明你離一個(gè)專業(yè)的網(wǎng)絡(luò)編程程序員越來(lái)越近了馒吴。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市瑟曲,隨后出現(xiàn)的幾起案子饮戳,更是在濱河造成了極大的恐慌,老刑警劉巖洞拨,帶你破解...
    沈念sama閱讀 219,366評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件扯罐,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡烦衣,警方通過(guò)查閱死者的電腦和手機(jī)歹河,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,521評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)花吟,“玉大人启泣,你說(shuō)我怎么就攤上這事∈颈玻” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,689評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵遣蚀,是天一觀的道長(zhǎng)矾麻。 經(jīng)常有香客問(wèn)我纱耻,道長(zhǎng),這世上最難降的妖魔是什么险耀? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,925評(píng)論 1 295
  • 正文 為了忘掉前任弄喘,我火速辦了婚禮,結(jié)果婚禮上甩牺,老公的妹妹穿的比我還像新娘蘑志。我一直安慰自己,他們只是感情好贬派,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,942評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布急但。 她就那樣靜靜地躺著,像睡著了一般搞乏。 火紅的嫁衣襯著肌膚如雪波桩。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,727評(píng)論 1 305
  • 那天请敦,我揣著相機(jī)與錄音镐躲,去河邊找鬼。 笑死侍筛,一個(gè)胖子當(dāng)著我的面吹牛萤皂,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播匣椰,決...
    沈念sama閱讀 40,447評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼裆熙,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了窝爪?” 一聲冷哼從身側(cè)響起弛车,我...
    開(kāi)封第一講書(shū)人閱讀 39,349評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎蒲每,沒(méi)想到半個(gè)月后纷跛,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,820評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡邀杏,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,990評(píng)論 3 337
  • 正文 我和宋清朗相戀三年贫奠,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片望蜡。...
    茶點(diǎn)故事閱讀 40,127評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡唤崭,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出脖律,到底是詐尸還是另有隱情谢肾,我是刑警寧澤,帶...
    沈念sama閱讀 35,812評(píng)論 5 346
  • 正文 年R本政府宣布小泉,位于F島的核電站芦疏,受9級(jí)特大地震影響冕杠,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜酸茴,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,471評(píng)論 3 331
  • 文/蒙蒙 一分预、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧薪捍,春花似錦笼痹、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,017評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至昆稿,卻和暖如春纺座,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背溉潭。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,142評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工净响, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人喳瓣。 一個(gè)月前我還...
    沈念sama閱讀 48,388評(píng)論 3 373
  • 正文 我出身青樓馋贤,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親畏陕。 傳聞我的和親對(duì)象是個(gè)殘疾皇子配乓,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,066評(píng)論 2 355