ทางเลือกเพื่อ“ netstat -s”


23

netstat -s พิมพ์สถิติโปรโตคอลรายละเอียดจำนวนมากเช่นจำนวนข้อความรีเซ็ต TCP ที่ได้รับหรือจำนวนข้อความ "คำขอ echo" ที่ส่งหรือจำนวนแพ็คเก็ตที่ลดลงเนื่องจากเส้นทางที่หายไป

เมื่อใดที่ Linux netstatพิจารณาว่าเลิกใช้แล้วทุกวันนี้มีทางเลือกอื่นอีกไหม?

สถิติการให้บริการโดยมีตื้นเมื่อเทียบกับคนที่ได้รับจากss -snetstat


tcpdump ดูเหมือนว่าจะตอบสนองความต้องการแบบเดียวกัน
Thomas Dickey

4
netstatเลิกใช้แล้ว ssใช้
mikeserv

@ThomasDickey tcpdumpอนุญาตให้บุคคลหนึ่งจับภาพการเข้าชมสด แต่ไม่ได้จัดเก็บสถิติตามวิธีที่netstat -sแสดง
Martin

1
การระบุแพลตฟอร์มอาจมีประโยชน์ คุณอาจต้องการตรวจสอบsysctlผลลัพธ์หรือเนื้อหาของ/proc/net/*โหนดต่าง ๆ
jcaron

คำตอบ:


16

netstatได้รับแน่นอนเลิกโดยการกระจายหลายแม้ว่ามันจะเป็นจริงมากของ "สุทธิเครื่องมือ" แพคเกจ (รวมทั้งifconfig, routeและarp) ที่ได้รับการคัดค้านในความโปรดปรานของแพคเกจ "iproute2" iproute2ได้รับการพัฒนาพร้อมกับคุณสมบัติการเชื่อมต่อเครือข่ายลีนุกซ์รุ่นล่าสุด , และยูทิลิตี้ดั้งเดิมไม่มี

iproute2 ที่คุณต้องการนั้นมีค่าน้อยที่รู้จักกันnstatนี้มีnetstat -sตัวนับแม้ว่าจะอยู่ในรูปแบบที่แตกต่างกันเล็กน้อย:

  • ชื่อเคาน์เตอร์แบบดิบ/procถูกนำมาใช้แต่ละส่วนนำหน้าด้วยคลาส ("Udp", "Tcp", "TcpExt" ฯลฯ )
  • คำอธิบายที่ยาว (และอาจเป็นภาษาท้องถิ่น) ของ netstat ไม่สามารถใช้ได้
  • ตัวนับค่าศูนย์ที่ละเว้นโดยค่าเริ่มต้น
  • ใช้เอาต์พุตคอลัมน์ที่สอดคล้องกับชื่อและค่าในคอลัมน์แรกและคอลัมน์ที่สอง
  • คอลัมน์ที่สามแสดงค่าเฉลี่ยในช่วงเวลาที่กำหนดถ้าคุณได้เริ่มต้นพื้นหลัง nstat ( -dโหมด daemon) หรือ 0.0 ถ้าไม่

    เช่นnstatพิมพ์ "UdpInDatagrams NNN" ไม่ใช่ "Udp: InDatagrams" และไม่ใช่รุ่น netbat verbose ของ "แพ็กเก็ตที่ได้รับ Udp: NNN"

nstatและสมมติว่าคุณต้องการส่วนเพิ่มแทนที่จะเป็นจำนวนสัมบูรณ์ดังนั้นสิ่งที่ใกล้เคียงที่สุดnetstat -sคือ/sbin/nstat -aszตัวเลือกที่-aใช้ตัวนับสัมบูรณ์-sไม่เก็บไฟล์ประวัติ-zไม่ละเว้นตัวนับค่าศูนย์

ssใช้เวลามากกว่าส่วน "ซ็อกเก็ต" ของnetstatแต่ไม่ได้ทำงานอย่างสมบูรณ์ตามที่คุณได้พบ ( ssดีกว่าnetstatในหลายกรณีจริงๆ แล้วสองข้อที่เจาะจงคือความสามารถในการใช้ตัวกรองนิพจน์และความสามารถเพิ่มเติมที่จะใช้tcp_diagและinet_diagเคอร์เนลโมดูล Linux เพื่อเข้าถึงข้อมูลเคอร์เนลซ็อกเก็ตได้โดยตรงมากกว่าผ่าน/proc)

หากคุณต้องการยืนยันการจับคู่ชื่อที่มีความหมายแหล่งที่มาของเครื่องมือ net คือการอ้างอิงที่ชัดเจน: http://sourcecodebrowser.com/net-tools/1.60/statistics_8c_source.html

Doug Vitale ให้คำแนะนำที่เป็นประโยชน์สำหรับการค้นหา iproute2 ที่เทียบเท่าของคำสั่งเก่า (มันไม่ได้ลบเลือนและไม่สมบูรณ์เล็กน้อยมันละเว้นการอ้างอิงใด ๆnstatซึ่งเป็นส่วนหนึ่งของแพ็คเกจ iproute2 ตั้งแต่เวลาอย่างน้อย 2004 kernel 2.6.x เวลา)

อย่างไรก็ตาม net-tools นั้นยังมีชีวิตอยู่และคุณควรจะสามารถหาแพ็คเกจสำหรับการแจกจ่ายของคุณ (หรือรวบรวมมันเอง)


23

NETSTAT ถือว่าเลิกใช้แล้วในปัจจุบันและโปรแกรมอื่น ๆ ที่รวมอยู่ในเครื่องมือเน็ตเช่น arp, ifconfig, iptunnel, nameif netstatและเส้นทาง

การทำงานของยูทิลิตี้เหล่านี้มีการทำซ้ำและปรับปรุงในชุดiproute2ใหม่โดยใช้ipคำสั่งใหม่เป็นหลัก

ตัวอย่างสำหรับคำสั่งที่เลิกใช้และการแทนที่:

arp => ip n (เพื่อนบ้าน ip)

ifconfig => ip a (ip addr), ลิงก์ ip, ip -s (ip -stats)

iptunnel => ip tunnel

iwconfig => iw

nameif => ip link, ifrename

netstat => ss, เส้นทาง ip (สำหรับ netstat-r), ลิงก์ ip -s (สำหรับ netstat -i), ip maddr (สำหรับ netstat-g)

netstatคำสั่งอ่านไฟล์ / proc ต่างๆเพื่อรวบรวมข้อมูล อย่างไรก็ตามวิธีการนี้จะอ่อนแอเมื่อมีการเชื่อมต่อจำนวนมากที่จะแสดง ทำให้ช้าลง ssคำสั่งได้รับข้อมูลโดยตรงจากพื้นที่เคอร์เนล ตัวเลือกที่ใช้กับssคำสั่งนั้นคล้ายกับ netstat มากทำให้เปลี่ยนได้ง่าย

สถิติการให้บริการโดยssมีผิวเผินแต่ก็ถือว่าเป็น ทางเลือกที่ดีกว่าที่จะnetstat

ตัวอย่าง :

รับการเชื่อมต่อทั้งหมด: ss | less

ss -t รับการเชื่อมต่อ tcp ไม่ได้อยู่ในโหมดฟัง (โปรแกรมเซิร์ฟเวอร์)

ss -u รับการเชื่อมต่อ udp ไม่ได้อยู่ในโหมดฟัง

ss -x รับการเชื่อมต่อท่อซ็อกเก็ตยูนิกซ์

ss -ta รับการเชื่อมต่อ TCP ทั้งหมด

ss -au รับการเชื่อมต่อ UDP ทั้งหมด

ss -nt tcp ทั้งหมดโดยไม่มีชื่อโฮสต์

ss -ltn ฟัง tcp โดยไม่มีความละเอียดโฮสต์

ss -ltp กำลังฟัง tcp ด้วย PID และชื่อ

ss -s พิมพ์สถิติ

ss -tn -o การเชื่อมต่อ TCP กับโฮสต์ของโดเมนและแสดงตัวจับเวลา keepalive

ss -tl4 การเชื่อมต่อ ip4


4
สิ่งนี้ไม่ตอบคำถาม OP ชี้ให้เห็นอย่างถูกต้องss -s ว่าไม่ได้ให้ข้อมูลที่netstat -sให้ นี้ยังมีข้อมูลที่ผิด: /proc เป็นอินเตอร์เฟซเคอร์เนลนี้และที่ว่าวิธีssObtains strace -e trace=file,read /sbin/ss -sมากของข้อมูล:
mr.spuratic

1
OP กล่าวว่าไม่ใช่ "เอสเอสที่มีผิวเผิน" แต่ " ss -sเป็นเพียงผิวเผินเมื่อเทียบกับที่จัดทำโดย netstat" (หมายถึงการเปรียบเทียบกับnetstat -s) และมันเป็นความจริง: เช่นจาก ss -s คุณไม่สามารถรู้อะไรเกี่ยวกับการส่ง TCP ซ้ำ
kenichi

4

คุณอาจต้องการตรวจสอบเนื้อหาของ/proc/net/netstat:

TcpExt: SyncookiesSent SyncookiesRecv SyncookiesFailed EmbryonicRsts PruneCalled RcvPruned OfoPruned OutOfWindowIcmps LockDroppedIcmps ArpFilter TW TWRecycled TWKilled PAWSPassive PAWSActive PAWSEstab DelayedACKs DelayedACKLocked DelayedACKLost ListenOverflows ListenDrops TCPPrequeued TCPDirectCopyFromBacklog TCPDirectCopyFromPrequeue TCPPrequeueDropped TCPHPHits TCPHPHitsToUser TCPPureAcks TCPHPAcks TCPRenoRecovery TCPSackRecovery TCPSACKReneging TCPFACKReorder TCPSACKReorder TCPRenoReorder TCPTSReorder TCPFullUndo TCPPartialUndo TCPDSACKUndo TCPLossUndo TCPLostRetransmit TCPRenoFailures TCPSackFailures TCPLossFailures TCPFastRetrans TCPForwardRetrans TCPSlowStartRetrans TCPTimeouts TCPLossProbes TCPLossProbeRecovery TCPRenoRecoveryFail TCPSackRecoveryFail TCPSchedulerFailed TCPRcvCollapsed TCPDSACKOldSent TCPDSACKOfoSent TCPDSACKRecv TCPDSACKOfoRecv TCPAbortOnData TCPAbortOnClose TCPAbortOnMemory TCPAbortOnTimeout TCPAbortOnLinger TCPAbortFailed TCPMemoryPressures TCPSACKDiscard TCPDSACKIgnoredOld TCPDSACKIgnoredNoUndo TCPSpuriousRTOs TCPMD5NotFound TCPMD5Unexpected TCPSackShifted TCPSackMerged TCPSackShiftFallback TCPBacklogDrop TCPMinTTLDrop TCPDeferAcceptDrop IPReversePathFilter TCPTimeWaitOverflow TCPReqQFullDoCookies TCPReqQFullDrop TCPRetransFail TCPRcvCoalesce TCPOFOQueue TCPOFODrop TCPOFOMerge TCPChallengeACK TCPSYNChallenge TCPFastOpenActive TCPFastOpenPassive TCPFastOpenPassiveFail TCPFastOpenListenOverflow TCPFastOpenCookieReqd TCPSpuriousRtxHostQueues BusyPollRxPackets
TcpExt: 0 0 3310 41566 0 0 0 8 0 0 6402271 0 0 0 0 55 4280514 134510 38423 0 611 15354484 20413302 794718685 0 14094957 6423168 25905597 17269587 4 23681 29 50 20 0 25 43 25 19211 1800 131 0 93 93 25430 4864 18099 1199566 2300620 1280201 0 279 0 0 38507 607 2359841 19 98943 1769 0 5993 0 0 0 3 65 1310588 380 0 0 0 0 613504 190 0 12056356 0 0 0 0 3 735740 43633 0 606 3933 193 0 24 0 0 0 14 0
IpExt: InNoRoutes InTruncatedPkts InMcastPkts OutMcastPkts InBcastPkts OutBcastPkts InOctets OutOctets InMcastOctets OutMcastOctets InBcastOctets OutBcastOctets InCsumErrors InNoECTPkts InECT1Pkts InECT0Pkts InCEPkts
IpExt: 0 0 50492 0 18482301 0 68850196397 26546692767 3029352 0 2305454225 0 0 457718114 36 19480 2472

ไม่ใช่รูปแบบที่เป็นมิตรที่สุด แต่คุณเข้าใจ

ไม่แน่ใจว่ามันจริงมีรายการที่เฉพาะเจาะจงที่คุณกำลังมองหา แต่พวกเขาอาจจะมีที่อื่น ๆ /proc/netใน


5
นี่คือสคริปต์ (บรรทัดยาวเดี่ยว) เพื่อจัดรูปแบบเอาต์พุต:awk '{for(i=1;i<=NF;i++)title[i] = $i; getline; print title[1]; for(i=2;i<=NF;i++)printf " %s: %s\n", title[i], $i }' /proc/net/netstat
meuh

1
/proc/net/snmpมีข้อมูลส่วนใหญ่และ/proc/net/netstatประกอบด้วยส่วนที่เหลือ น่าเศร้าที่คุณจะต้องอ่านแหล่งที่มาของเครื่องมือเน็ตstatistics.cเพื่อกำหนดการแมปชื่อทั้งหมด แต่ส่วนใหญ่ค่อนข้างชัดเจน
mr.spuratic
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.