diff --git a/CHANGELOG.md b/CHANGELOG.md index cccaca2..786b96b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,25 @@ The release notes on GitHub are taken from this file: the section whose heading is the version number. +## 1.2.3 + +Interfaces +- **Interface** at the top of the traffic pages (Overview, Top 66, Traffic + details, Flow paths, Geo & networks, Flow records, detail): all + interfaces, or one, and the pages show only the traffic through it. It + starts on the default interface and is kept in the link. Findings, + Threat intel, Interface check and Settings stay on all traffic. One + interface over 7 or 30 days is read from the flow records (slower, + as far back as they are kept). +- Interface check: each interface can be named and tagged (✎) and one made + the default (★); saved to its iface line in Names as tag=… and default. + The page opens on the default interface. +- Interface check: the bits/s and packets/s charts are full width, one + above the other. +- Overview: the bandwidth of the chosen (or default, or busiest) interface + in bits/s, ingress green and egress blue, above the bandwidth by + application. + ## 1.2.2 NetFlow and IPFIX sampling diff --git a/README.md b/README.md index e315cd2..61c4e2d 100644 --- a/README.md +++ b/README.md @@ -517,10 +517,16 @@ If a device does not appear: Flow numbers are estimates: sampled packets times the sampling rate. traffic66 compares them with the device's own interface counters and shows the difference on **Interface check**, with the likely cause when it is -larger than sampling alone explains. Each interface has a bits/s and a -packets/s chart with ingress (green) and egress (blue); the device's own -counters are dashed lines on the bits/s chart. Picking an interface in the -list shows its charts. +larger than sampling alone explains. Each interface has a full-width +bits/s chart and, under it, a packets/s chart, with ingress (green) and +egress (blue); the device's own counters are dashed lines on the bits/s +chart. Picking an interface in the list shows its charts. + +Each row of the list has two buttons. **✎** gives the interface a name and +a short tag (such as *uplink*), shown next to its name everywhere. **☆** +makes it the default interface (**★**); there is one default. The pages +then open on it (see the **Interface** choice under [Using the web UI](#9-using-the-web-ui)), and the overview shows its +bandwidth. Both are saved at once to the `iface` line in Names. ![Interface check: traffic of every interface, and the flow estimate next to the device counter](docs/images/interfaces.png) @@ -571,8 +577,9 @@ device 192.0.2.1 Core router device 192.0.2.9 Branch firewall unsampled device 192.0.2.20 Edge router sampling=1000 -# interface names, by device address and ifIndex; speed in bits per second -iface 192.0.2.1 3 ISP uplink speed=1000000000 +# interface names, by device address and ifIndex; speed in bits per second, +# tag= a short tag, default = the interface the pages open on (one only) +iface 192.0.2.1 3 ISP uplink speed=1000000000 tag=uplink default # host names shown instead of addresses host 10.10.3.27 Finance PC @@ -674,7 +681,7 @@ Pages: | Page | What it answers | |---|---| -| Overview | How much traffic now, by application (**Total**, or only **Inbound** or **Outbound** traffic of your networks), compared with the same time yesterday (ranges up to a day), last week (up to a week) or the days before (longer ranges), when there is data then; open findings; direction and protocol; top clients and services | +| Overview | The bandwidth of the chosen interface (or the default, or else the busiest) in bits/s, ingress and egress as seen by the interface; how much traffic now, by application (**Total**, or only **Inbound** or **Outbound** traffic of your networks), compared with the same time yesterday (ranges up to a day), last week (up to a week) or the days before (longer ranges), when there is data then; open findings; direction and protocol; top clients and services | | Top 66 | Opens on **Table**, one table of the top 66: by default conversations (client, server, service, country). Every column heading sorts; number columns (traffic, packets, average packet size, flows) rank all traffic in the range, so the smallest average packet size finds scanners and floods. **Group by** switches to applications, networks, segments, devices, encapsulation and VLAN. **Talkers** shows the top 30 clients and servers side by side with traffic, packets and flow records, above a row for all traffic | | Traffic details | Two ring charts. **Servers and clients**: the inner ring is the 8 busiest servers, the outer ring the clients of each; **Clients inside** turns it round (clients inside, the servers each uses outside), since one side often explains more than the other. **Services**: one ring of the busiest services. Point at a segment for its traffic; click it like any value | | Flow paths | Which host uses which application towards which country: the 8 busiest hosts, the rest as Other. **Client → server** shows client → service → server; **By network** shows networks instead of hosts. Long names are shortened to 22 characters; point at one for the full name | @@ -682,7 +689,7 @@ Pages: | Threat intel | Hosts that talked to addresses on your threat lists, and how much they sent | | Geo & networks | A world map of traffic by country, with lines from your networks; the networks (AS) traffic came from and went to, over time in bits/s and packets/s; traffic by country and by network | | Settings | Devices, sampling, loss, collectors, SNMP, the countries and networks database, the logo, and **Names** | -| Interface check | Traffic of every interface over time in bits/s and packets/s, ingress (green) and egress (blue), with the device counters as dashed lines; how far the flow numbers are from the counters, worst first, with reasons | +| Interface check | Traffic of every interface over time in bits/s and, below, packets/s, ingress (green) and egress (blue), with the device counters as dashed lines; how far the flow numbers are from the counters, worst first, with reasons; a name, a tag and the default for each interface | | Flow records | How many flow records there were and when (a bar per interval), and the records themselves, newest first, page by page, with selectable columns. Opens on the last 15 minutes, updated every 5 seconds; opened from a value on another page (**Show its flow records**) it keeps that page's time range, and **Back to live** returns | | Data cleanup | Deletes data older than 120, 90, 60, 30 or 7 days, or all of it, with how much each frees ([more](#13-data-backup-upgrade-uninstall)) | | Offline pcap analysis | Packet captures (pcap, pcapng) analysed apart from the live data ([more](#offline-pcap-analysis)) | @@ -693,6 +700,16 @@ intel, Geo & networks), setup and data (Settings, Flow records, Data cleanup) and Offline pcap analysis. Under the logo are the version and the server's date and time. +Above the traffic pages (Overview, Top 66, Traffic details, Flow paths, +Geo & networks, Flow records and the detail of a value) is **Interface**: +**All interfaces**, or one interface, so that these pages show only the +traffic through it (in or out). It starts on the default interface (★, +set on **Interface check**) and the choice is part of the link. Findings, +Threat intel, Interface check and Settings always cover all traffic. For +one interface over 7 or 30 days the pages read the flow records rather +than the hourly and daily summaries, so they take longer and reach back +as far as flow records are kept (30 days by default). + Above the pages: time range (15 minutes to 30 days, or **Custom…** for any start and end, also further back than 30 days), automatic refresh every 30 seconds, and **Copy link**, which copies a link to exactly the current view diff --git a/docs/README.ar.md b/docs/README.ar.md index f7b2213..869d102 100644 --- a/docs/README.ar.md +++ b/docs/README.ar.md @@ -539,9 +539,15 @@ softflowd -i eth0 -n 192.0.2.50:2055 -v 9 -t maxlife=60 أرقام التدفقات تقديرية: عدد الحزم المأخوذة عينةً مضروبًا في معدّل أخذ العينات. يقارنها traffic66 بعدّادات الواجهات في الجهاز نفسه ويعرض الفرق في **مطابقة الواجهات**، مع السبب المرجّح حين يكون الفرق أكبر مما يفسّره أخذ -العينات وحده. لكل واجهة مخطط بوحدة bits/s وآخر بوحدة packets/s فيهما الدخول -(بالأخضر) والخروج (بالأزرق)؛ وتظهر عدّادات الجهاز نفسه خطوطًا متقطعة على مخطط -bits/s. واختيار واجهة من القائمة يعرض مخططاتها. +العينات وحده. لكل واجهة مخطط بوحدة bits/s بعرض الصفحة كاملًا، وتحته مخطط بوحدة +packets/s، فيهما الدخول (بالأخضر) والخروج (بالأزرق)؛ وتظهر عدّادات الجهاز نفسه +خطوطًا متقطعة على مخطط bits/s. واختيار واجهة من القائمة يعرض مخططاتها. + +في كل صف من القائمة زرّان. يمنح **✎** الواجهة اسمًا ووسمًا قصيرًا (مثل *uplink*) +يظهر بجوار اسمها في كل مكان. ويجعلها **☆** الواجهة الافتراضية (**★**)؛ وهناك +واجهة افتراضية واحدة فقط. بعدها تُفتح الصفحات عليها (انظر خيار **الواجهة** في +[استخدام واجهة الويب](#9-using-the-web-ui))، وتعرض النظرة العامة عرض نطاقها الترددي. +ويُحفظ كلاهما فورًا في سطر `iface` في **الأسماء**. ![مطابقة الواجهات: حركة كل واجهة، وتقدير التدفقات بجوار عدّاد الجهاز](images/interfaces.png) @@ -592,8 +598,9 @@ device 192.0.2.1 Core router device 192.0.2.9 Branch firewall unsampled device 192.0.2.20 Edge router sampling=1000 -# interface names, by device address and ifIndex; speed in bits per second -iface 192.0.2.1 3 ISP uplink speed=1000000000 +# interface names, by device address and ifIndex; speed in bits per second, +# tag= a short tag, default = the interface the pages open on (one only) +iface 192.0.2.1 3 ISP uplink speed=1000000000 tag=uplink default # host names shown instead of addresses host 10.10.3.27 Finance PC @@ -676,7 +683,7 @@ curl -L https://www.spamhaus.org/drop/drop.txt -o /threats/spamh | الصفحة | ما الذي تجيب عنه | |---|---| -| نظرة عامة | حجم الحركة الآن حسب التطبيق (**الإجمالي**، أو حركة شبكاتك في اتجاه **وارد** أو **صادر** فقط)، مقارنةً بالوقت نفسه أمس (للنطاقات حتى يوم)، أو بالأسبوع الماضي (حتى أسبوع)، أو بالأيام السابقة (للنطاقات الأطول)، متى توفرت بيانات لتلك الفترة؛ الاكتشافات المفتوحة؛ الاتجاه والبروتوكول؛ أبرز العملاء والخدمات | +| نظرة عامة | عرض النطاق الترددي للواجهة المختارة (أو الافتراضية، وإلا فالأكثر نشاطًا) بوحدة bits/s، الدخول والخروج كما تراهما الواجهة؛ حجم الحركة الآن حسب التطبيق (**الإجمالي**، أو حركة شبكاتك في اتجاه **وارد** أو **صادر** فقط)، مقارنةً بالوقت نفسه أمس (للنطاقات حتى يوم)، أو بالأسبوع الماضي (حتى أسبوع)، أو بالأيام السابقة (للنطاقات الأطول)، متى توفرت بيانات لتلك الفترة؛ الاكتشافات المفتوحة؛ الاتجاه والبروتوكول؛ أبرز العملاء والخدمات | | أعلى 66 | تُفتح على **جدول**، وهو جدول واحد لأعلى 66: افتراضيًا المحادثات (العميل والخادم والخدمة والدولة). كل عنوان عمود يفرز؛ والأعمدة الرقمية (حركة المرور، الحزم، متوسط الحزمة، التدفقات) تعيد اختيار أعلى 66 من كل حركة المرور في الفترة، لذا يكشف أصغر متوسط حزمة عمليات المسح والإغراق. ويبدّل **التجميع حسب** إلى التطبيقات والشبكات والمقاطع والأجهزة وأنواع التغليف وشبكات VLAN. أما **أكثر الأطراف نشاطًا** فيعرض أعلى 30 عميلًا وخادمًا جنبًا إلى جنب مع الحركة والحزم وسجلات التدفق، فوق صف لكل الحركة | | تفاصيل الحركة | مخططان حلقيان. **الخوادم والعملاء**: الحلقة الداخلية أكثر 8 خوادم نشاطًا، والخارجية عملاء كل منها؛ ويعكس **العملاء في الداخل** ذلك (العملاء في الداخل، والخوادم التي يستخدمها كل منهم في الخارج)، إذ كثيرًا ما يفسّر أحد الطرفين أكثر من الآخر. **الخدمات**: حلقة واحدة لأكثر الخدمات نشاطًا. مرّر المؤشر على جزء لترى حركته، وانقر عليه كأي قيمة | | مسارات الحركة | أي مضيف يستخدم أي تطبيق نحو أي دولة: أكثر 8 مضيفات نشاطًا، والباقي ضمن «أخرى». ويعرض **العميل ← الخادم** العميل ← الخدمة ← الخادم؛ ويعرض **حسب المقطع** الشبكات بدل المضيفات. تُختصر الأسماء الطويلة إلى 22 حرفًا؛ مرّر المؤشر على أحدها لترى الاسم كاملًا | @@ -684,7 +691,7 @@ curl -L https://www.spamhaus.org/drop/drop.txt -o /threats/spamh | معلومات التهديدات | المضيفات التي تواصلت مع عناوين في قوائم تهديداتك، وكم أرسلت | | الجغرافيا والشبكات | خريطة العالم للحركة حسب الدولة، مع خطوط من شبكاتك؛ الشبكات (AS) التي جاءت منها الحركة وذهبت إليها، عبر الزمن بوحدة bits/s وpackets/s؛ والحركة حسب الدولة وحسب الشبكة | | الإعدادات | الأجهزة، وأخذ العينات، والفقد، والمستقبِلات، وSNMP، وقاعدة بيانات الدول والشبكات، والشعار، و**الأسماء** | -| مطابقة الواجهات | حركة كل واجهة عبر الزمن بوحدة bits/s وpackets/s، الدخول (بالأخضر) والخروج (بالأزرق)، مع عدّادات الجهاز خطوطًا متقطعة؛ ومدى ابتعاد أرقام التدفقات عن العدّادات، الأسوأ أولًا، مع الأسباب | +| مطابقة الواجهات | حركة كل واجهة عبر الزمن بوحدة bits/s، وتحتها packets/s، الدخول (بالأخضر) والخروج (بالأزرق)، مع عدّادات الجهاز خطوطًا متقطعة؛ ومدى ابتعاد أرقام التدفقات عن العدّادات، الأسوأ أولًا، مع الأسباب؛ واسم ووسم لكل واجهة، والواجهة الافتراضية | | سجلات التدفق | كم سجل تدفق كان هناك ومتى (شريط لكل فترة)، والسجلات نفسها، الأحدث أولًا، صفحةً صفحة، مع أعمدة قابلة للاختيار. تُفتح على آخر 15 دقيقة، وتُحدَّث كل 5 ثوانٍ؛ وإذا فُتحت من قيمة في صفحة أخرى (**اعرض سجلات تدفقه**) فإنها تحتفظ بالنطاق الزمني لتلك الصفحة، ويعيدك **العودة إلى البث المباشر** | | تنظيف البيانات | يحذف البيانات الأقدم من 120 أو 90 أو 60 أو 30 أو 7 أيام، أو كلها، مع مقدار ما يحرّره كل خيار ([المزيد](#13-data-backup-upgrade-uninstall)) | | تحليل pcap دون اتصال | تحليل ملفات التقاط الحزم (pcap وpcapng) بمعزل عن البيانات الحية ([المزيد](#تحليل-pcap-دون-اتصال)) | @@ -695,6 +702,15 @@ curl -L https://www.spamhaus.org/drop/drop.txt -o /threats/spamh تنظيف البيانات)، وتحليل pcap دون اتصال. وتحت الشعار يظهر الإصدار وتاريخ الخادم ووقته. +فوق صفحات الحركة (نظرة عامة، أعلى 66، تفاصيل الحركة، مسارات الحركة، الجغرافيا +والشبكات، سجلات التدفق، وتفاصيل أي قيمة) يوجد **الواجهة**: **كل الواجهات**، أو +واجهة واحدة، فلا تعرض هذه الصفحات إلا الحركة المارّة عبرها (دخولًا أو خروجًا). +ويبدأ على الواجهة الافتراضية (★، تُضبط في **مطابقة الواجهات**)، والاختيار جزء من +الرابط. أما الاكتشافات ومعلومات التهديدات ومطابقة الواجهات والإعدادات فتغطي +دائمًا كل الحركة. ولواجهة واحدة على مدى 7 أو 30 يومًا تقرأ الصفحات سجلات التدفق +بدل الملخصات الساعية واليومية، فتستغرق وقتًا أطول ولا تعود إلى الوراء إلا بقدر +مدة الاحتفاظ بسجلات التدفق (30 يومًا افتراضيًا). + فوق الصفحات: النطاق الزمني (من 15 دقيقة إلى 30 يومًا، أو **مخصص…** لأي بداية ونهاية، حتى أبعد من 30 يومًا)، وتحديث تلقائي كل 30 ثانية، و**نسخ الرابط** الذي ينسخ رابطًا إلى العرض الحالي بالضبط (الصفحة والنطاق الزمني diff --git a/docs/README.bn.md b/docs/README.bn.md index c8b1982..cf68a67 100644 --- a/docs/README.bn.md +++ b/docs/README.bn.md @@ -545,10 +545,16 @@ buffer error বাড়তে থাকলে `net.core.rmem_max` বাড় Flow-এর সংখ্যা আসলে অনুমান: sampled packet গুণ sampling rate। traffic66 এগুলো ডিভাইসের নিজের interface counter-এর সাথে তুলনা করে এবং পার্থক্য **ইন্টারফেস মিলানো**-তে দেখায়; পার্থক্য শুধু sampling দিয়ে ব্যাখ্যা করা যায় -তার চেয়ে বেশি হলে সম্ভাব্য কারণও দেখায়। প্রতিটি interface-এর একটি bits/s ও -একটি packets/s chart আছে, তাতে ingress (সবুজ) ও egress (নীল) থাকে; ডিভাইসের -নিজের counter bits/s chart-এ ড্যাশ রেখা হিসেবে দেখা যায়। তালিকায় একটি -interface বেছে নিলে তার chart দেখা যায়। +তার চেয়ে বেশি হলে সম্ভাব্য কারণও দেখায়। প্রতিটি interface-এর একটি পূর্ণ-প্রস্থ +bits/s chart এবং তার নিচে একটি packets/s chart আছে, তাতে ingress (সবুজ) ও +egress (নীল) থাকে; ডিভাইসের নিজের counter bits/s chart-এ ড্যাশ রেখা হিসেবে +দেখা যায়। তালিকায় একটি interface বেছে নিলে তার chart দেখা যায়। + +তালিকার প্রতিটি row-এ দুটি বোতাম আছে। **✎** interface-কে একটি নাম ও একটি ছোট +ট্যাগ (যেমন *uplink*) দেয়, যা সব জায়গায় তার নামের পাশে দেখা যায়। **☆** এটিকে +ডিফল্ট interface (**★**) করে; ডিফল্ট একটিই থাকে। তারপর পেজগুলো এটিতেই খোলে +([web UI ব্যবহার](#9-using-the-web-ui)-এ **ইন্টারফেস** বাছাই দেখুন), এবং সারসংক্ষেপ +এর bandwidth দেখায়। দুটোই সঙ্গে সঙ্গে **নাম**-এর `iface` লাইনে সংরক্ষিত হয়। ![ইন্টারফেস মিলানো: প্রতিটি interface-এর ট্রাফিক, আর ডিভাইসের counter-এর পাশে flow-এর অনুমান](images/interfaces.png) @@ -601,8 +607,9 @@ device 192.0.2.1 Core router device 192.0.2.9 Branch firewall unsampled device 192.0.2.20 Edge router sampling=1000 -# interface names, by device address and ifIndex; speed in bits per second -iface 192.0.2.1 3 ISP uplink speed=1000000000 +# interface names, by device address and ifIndex; speed in bits per second, +# tag= a short tag, default = the interface the pages open on (one only) +iface 192.0.2.1 3 ISP uplink speed=1000000000 tag=uplink default # host names shown instead of addresses host 10.10.3.27 Finance PC @@ -688,7 +695,7 @@ application, দেশ, ডিভাইস — ক্লিক করা যা | পেজ | কোন প্রশ্নের উত্তর দেয় | |---|---| -| সারসংক্ষেপ | এখন কত ট্রাফিক, application অনুযায়ী (**মোট**, অথবা শুধু আপনার নেটওয়ার্কের **আগত** বা **বহির্গামী** ট্রাফিক), গতকাল একই সময়ের তুলনায় (এক দিন পর্যন্ত range), গত সপ্তাহের তুলনায় (এক সপ্তাহ পর্যন্ত) বা আগের দিনগুলোর তুলনায় (আরও লম্বা range), যখন সেই সময়ের ডেটা থাকে; খোলা সন্দেহজনক কার্যকলাপ; দিক ও protocol; শীর্ষ client ও service | +| সারসংক্ষেপ | বেছে নেওয়া interface-এর (অথবা ডিফল্টের, নইলে সবচেয়ে ব্যস্তটির) bandwidth bits/s-এ, interface যেমন দেখে তেমন ingress ও egress; এখন কত ট্রাফিক, application অনুযায়ী (**মোট**, অথবা শুধু আপনার নেটওয়ার্কের **আগত** বা **বহির্গামী** ট্রাফিক), গতকাল একই সময়ের তুলনায় (এক দিন পর্যন্ত range), গত সপ্তাহের তুলনায় (এক সপ্তাহ পর্যন্ত) বা আগের দিনগুলোর তুলনায় (আরও লম্বা range), যখন সেই সময়ের ডেটা থাকে; খোলা সন্দেহজনক কার্যকলাপ; দিক ও protocol; শীর্ষ client ও service | | শীর্ষ 66 | **সারণি**-তে খোলে, শীর্ষ 66-এর একটি table: ডিফল্টভাবে conversation (client, server, service, দেশ)। যেকোনো column heading-এ sort হয়; সংখ্যার column (ট্রাফিক, প্যাকেট, গড় প্যাকেট, flow) সময়সীমার সব ট্রাফিক থেকে শীর্ষ 66 আবার বাছে, তাই সবচেয়ে ছোট গড় প্যাকেট দিয়ে scan ও flood ধরা পড়ে। **গ্রুপের ভিত্তি**-তে application, নেটওয়ার্ক, segment, ডিভাইস, encapsulation ও VLAN-এ যাওয়া যায়। **সবচেয়ে সক্রিয় হোস্ট** শীর্ষ 30টি client ও server পাশাপাশি দেখায়, ট্রাফিক, প্যাকেট ও flow record সহ, সব ট্রাফিকের একটি row-এর ওপরে | | ট্রাফিকের বিস্তারিত | দুটি ring chart। **সার্ভার ও ক্লায়েন্ট**: ভেতরের বলয়ে সবচেয়ে ব্যস্ত 8টি server, বাইরের বলয়ে প্রতিটির client; **ক্লায়েন্ট ভেতরে** এটি উল্টে দেয় (ভেতরে client, বাইরে প্রতিটির ব্যবহৃত server), কারণ প্রায়ই একটি দিক অন্যটির চেয়ে বেশি ব্যাখ্যা করে। **সেবা**: সবচেয়ে ব্যস্ত service-এর একটি বলয়। কোনো অংশের ওপর পয়েন্টার রাখলে তার ট্রাফিক দেখা যায়; অন্য যেকোনো value-এর মতো তাতে click করুন | | ট্রাফিকের পথ | কোন host কোন দেশের দিকে কোন application ব্যবহার করে: সবচেয়ে ব্যস্ত 8টি host, বাকিগুলো "অন্যান্য" হিসেবে। **ক্লায়েন্ট → সার্ভার** client → service → server দেখায়; **সেগমেন্ট অনুযায়ী** host-এর বদলে নেটওয়ার্ক দেখায়। লম্বা নাম 22 অক্ষরে ছোট করা হয়; পুরো নাম দেখতে তার ওপর পয়েন্টার রাখুন | @@ -696,7 +703,7 @@ application, দেশ, ডিভাইস — ক্লিক করা যা | হুমকির তথ্য | যেসব host আপনার threat list-এর address-এর সাথে কথা বলেছে, এবং কতটা পাঠিয়েছে | | ভূগোল ও নেটওয়ার্ক | দেশ অনুযায়ী ট্রাফিকের বিশ্ব মানচিত্র, আপনার নেটওয়ার্ক থেকে রেখা সহ; যেসব নেটওয়ার্ক (AS) থেকে ট্রাফিক এসেছে ও যেখানে গেছে, সময়ের সাথে bits/s ও packets/s-এ; দেশ ও নেটওয়ার্ক অনুযায়ী ট্রাফিক | | সেটিংস | ডিভাইস, sampling, loss, collector, SNMP, দেশ ও নেটওয়ার্ক ডেটাবেস, লোগো, এবং **নাম** | -| ইন্টারফেস মিলানো | সময়ের সাথে প্রতিটি interface-এর ট্রাফিক bits/s ও packets/s-এ, ingress (সবুজ) ও egress (নীল), ডিভাইসের counter ড্যাশ রেখা হিসেবে; flow-এর সংখ্যা counter থেকে কতটা দূরে, সবচেয়ে খারাপগুলো আগে, কারণসহ | +| ইন্টারফেস মিলানো | সময়ের সাথে প্রতিটি interface-এর ট্রাফিক bits/s-এ এবং, নিচে, packets/s-এ, ingress (সবুজ) ও egress (নীল), ডিভাইসের counter ড্যাশ রেখা হিসেবে; flow-এর সংখ্যা counter থেকে কতটা দূরে, সবচেয়ে খারাপগুলো আগে, কারণসহ; প্রতিটি interface-এর জন্য একটি নাম, একটি ট্যাগ ও ডিফল্ট | | ফ্লো রেকর্ড | কতগুলো flow record ছিল এবং কখন (প্রতি interval-এ একটি bar), আর record-গুলো নিজেই, নতুনগুলো আগে, পেজ ধরে ধরে, বেছে নেওয়া যায় এমন column সহ। শেষ 15 মিনিট দিয়ে খোলে, প্রতি 5 সেকেন্ডে আপডেট হয়; অন্য পেজের কোনো value থেকে (**এর ফ্লো রেকর্ড দেখুন**) খুললে সেই পেজের সময়সীমা রাখে, আর **লাইভে ফিরুন** আবার লাইভে নিয়ে যায় | | ডেটা পরিষ্কার | 120, 90, 60, 30 বা 7 দিনের চেয়ে পুরোনো ডেটা, বা সব ডেটা মুছে দেয়, প্রতিটিতে কতটা জায়গা খালি হয় তা সহ ([আরও](#13-data-backup-upgrade-uninstall)) | | অফলাইন pcap বিশ্লেষণ | pcap, pcapng ক্যাপচার লাইভ ডেটা থেকে আলাদা করে বিশ্লেষণ ([আরও](#অফলাইন-pcap-বিশ্লেষণ)) | @@ -707,6 +714,16 @@ application, দেশ, ডিভাইস — ক্লিক করা যা ডেটা পরিষ্কার) এবং অফলাইন pcap বিশ্লেষণ। লোগোর নিচে version এবং server-এর তারিখ ও সময় থাকে। +ট্রাফিক পেজগুলোর (সারসংক্ষেপ, শীর্ষ 66, ট্রাফিকের বিস্তারিত, ট্রাফিকের পথ, ভূগোল ও +নেটওয়ার্ক, ফ্লো রেকর্ড এবং কোনো value-এর বিস্তারিত) ওপরে **ইন্টারফেস** আছে: +**সব ইন্টারফেস**, অথবা একটি interface, যাতে এই পেজগুলো শুধু সেটির মধ্য দিয়ে +যাওয়া ট্রাফিক (আগত বা বহির্গামী) দেখায়। এটি ডিফল্ট interface (★, **ইন্টারফেস +মিলানো**-তে ঠিক করা) দিয়ে শুরু হয় এবং বাছাইটি লিংকের অংশ। সন্দেহজনক কার্যকলাপ, +হুমকির তথ্য, ইন্টারফেস মিলানো ও সেটিংস সবসময় সব ট্রাফিক দেখায়। 7 বা 30 দিনের +জন্য একটি interface বাছলে পেজগুলো ঘণ্টা ও দিনের summary-র বদলে flow record +পড়ে, তাই বেশি সময় নেয় এবং ততদূর পেছনে যায় যতদিন flow record রাখা হয় +(ডিফল্টভাবে 30 দিন)। + পেজগুলোর ওপরে: time range (15 মিনিট থেকে 30 দিন, অথবা যেকোনো শুরু ও শেষের জন্য **নিজের মতো…**, 30 দিনের চেয়ে আগেরও), প্রতি 30 সেকেন্ডে automatic refresh, এবং **লিংক কপি করুন**, যা ঠিক বর্তমান view-এর (পেজ, time range ও diff --git a/docs/README.es.md b/docs/README.es.md index 9d18cd4..78fe7a0 100644 --- a/docs/README.es.md +++ b/docs/README.es.md @@ -556,10 +556,17 @@ Las cifras de flujo son estimaciones: paquetes muestreados por la tasa de muestreo. traffic66 las compara con los contadores de interfaz del propio equipo y muestra la diferencia en **Verificación de interfaces**, con la causa probable cuando es mayor de lo que explica el propio muestreo. Cada -interfaz tiene un gráfico en bits/s y otro en paquetes/s con la entrada -(verde) y la salida (azul); los contadores del propio equipo aparecen como -líneas discontinuas en el gráfico de bits/s. Al elegir una interfaz en la -lista se muestran sus gráficos. +interfaz tiene un gráfico en bits/s a todo el ancho y, debajo, otro en +paquetes/s, con la entrada (verde) y la salida (azul); los contadores del +propio equipo aparecen como líneas discontinuas en el gráfico de bits/s. Al +elegir una interfaz en la lista se muestran sus gráficos. + +Cada fila de la lista tiene dos botones. **✎** da a la interfaz un nombre y +una etiqueta corta (como *uplink*), que aparece junto a su nombre en todas +partes. **☆** la convierte en la interfaz predeterminada (**★**); solo hay +una. Las páginas se abren entonces en ella (vea la opción **Interfaz** en +[Uso de la interfaz web](#9-using-the-web-ui)), y el resumen muestra su +ancho de banda. Ambos se guardan al momento en la línea `iface` de Nombres. ![Verificación de interfaces: tráfico de cada interfaz, y la estimación de flujos junto al contador del equipo](images/interfaces.png) @@ -615,8 +622,9 @@ device 192.0.2.1 Core router device 192.0.2.9 Branch firewall unsampled device 192.0.2.20 Edge router sampling=1000 -# interface names, by device address and ifIndex; speed in bits per second -iface 192.0.2.1 3 ISP uplink speed=1000000000 +# interface names, by device address and ifIndex; speed in bits per second, +# tag= a short tag, default = the interface the pages open on (one only) +iface 192.0.2.1 3 ISP uplink speed=1000000000 tag=uplink default # host names shown instead of addresses host 10.10.3.27 Finance PC @@ -707,7 +715,7 @@ Páginas: | Página | Qué responde | |---|---| -| Resumen | Cuánto tráfico hay ahora, por aplicación (**Total**, o solo el tráfico **Entrante** o **Saliente** de sus redes), frente a la misma hora de ayer (periodos de hasta un día), la semana pasada (hasta una semana) o los días anteriores (periodos más largos), cuando hay datos de entonces; hallazgos abiertos; dirección y protocolo; principales clientes y servicios | +| Resumen | El ancho de banda de la interfaz elegida (o de la predeterminada, o si no de la de más tráfico) en bits/s, entrada y salida vistas desde la interfaz; cuánto tráfico hay ahora, por aplicación (**Total**, o solo el tráfico **Entrante** o **Saliente** de sus redes), frente a la misma hora de ayer (periodos de hasta un día), la semana pasada (hasta una semana) o los días anteriores (periodos más largos), cuando hay datos de entonces; hallazgos abiertos; dirección y protocolo; principales clientes y servicios | | Top 66 | Se abre en **Tabla**, una sola tabla de los 66 primeros: por defecto, conversaciones (cliente, servidor, servicio, país). Cualquier encabezado ordena; las columnas numéricas (tráfico, paquetes, paquete medio, flujos) clasifican todo el tráfico del periodo, así el menor paquete medio revela escaneos e inundaciones. **Agrupar por** cambia a aplicaciones, redes, segmentos, equipos, encapsulación y VLAN. **Interlocutores principales** muestra los 30 primeros clientes y servidores lado a lado con tráfico, paquetes y registros de flujo, sobre una fila para todo el tráfico | | Detalles del tráfico | Dos gráficos de anillos. **Servidores y clientes**: el anillo interior son los 8 servidores con más tráfico, el exterior los clientes de cada uno; **Clientes dentro** le da la vuelta (clientes dentro, fuera los servidores que usa cada uno), ya que a menudo un lado explica más que el otro. **Servicios**: un anillo con los servicios con más tráfico. Al pasar el ratón sobre un segmento se ve su tráfico; se hace clic en él como en cualquier valor | | Rutas de tráfico | Qué host usa qué aplicación hacia qué país: los 8 hosts con más tráfico, el resto como Otros. **Cliente → servidor** muestra cliente → servicio → servidor; **Por segmento** muestra segmentos en lugar de hosts. Los nombres largos se acortan a 22 caracteres; al pasar el ratón se ve el nombre completo | @@ -715,7 +723,7 @@ Páginas: | Inteligencia de amenazas | Hosts que hablaron con direcciones de sus listas de amenazas y cuánto enviaron | | Geografía y redes | Un mapa del mundo del tráfico por país, con líneas desde sus redes; las redes (AS) de las que vino y a las que fue el tráfico, en el tiempo en bits/s y paquetes/s; tráfico por país y por red | | Configuración | Equipos, muestreo, pérdidas, colectores, SNMP, la base de datos de países y redes, el logotipo y **Nombres** | -| Verificación de interfaces | Tráfico de cada interfaz en el tiempo en bits/s y paquetes/s, entrada (verde) y salida (azul), con los contadores del equipo como líneas discontinuas; cuánto se alejan las cifras de flujo de los contadores, de peor a mejor, con motivos | +| Verificación de interfaces | Tráfico de cada interfaz en el tiempo en bits/s y, debajo, paquetes/s, entrada (verde) y salida (azul), con los contadores del equipo como líneas discontinuas; cuánto se alejan las cifras de flujo de los contadores, de peor a mejor, con motivos; un nombre, una etiqueta y la predeterminada para cada interfaz | | Registros de flujo | Cuántos registros de flujo hubo y cuándo (una barra por intervalo), y los registros mismos, del más reciente al más antiguo, página a página, con columnas seleccionables. Se abre en los últimos 15 minutos, actualizados cada 5 segundos; abierta desde un valor de otra página (**Ver sus registros de flujo**) conserva el rango de tiempo de esa página, y **Volver a tiempo real** regresa | | Limpieza de datos | Borra los datos de más de 120, 90, 60, 30 o 7 días, o todos, indicando cuánto libera cada opción ([más](#13-data-backup-upgrade-uninstall)) | | Análisis offline de pcap | Capturas de paquetes (pcap, pcapng) analizadas aparte de los datos en vivo ([más](#análisis-offline-de-pcap)) | @@ -727,6 +735,18 @@ redes), configuración y datos (Configuración, Registros de flujo, Limpieza de datos) y Análisis offline de pcap. Bajo el logotipo aparecen la versión y la fecha y hora del servidor. +Encima de las páginas de tráfico (Resumen, Top 66, Detalles del tráfico, +Rutas de tráfico, Geografía y redes, Registros de flujo y el detalle de un +valor) está **Interfaz**: **Todas las interfaces**, o una interfaz, para que +estas páginas muestren solo el tráfico que pasa por ella (de entrada o de +salida). Empieza en la interfaz predeterminada (★, fijada en +**Verificación de interfaces**) y la elección forma parte del enlace. +Hallazgos, Inteligencia de amenazas, Verificación de interfaces y +Configuración siempre abarcan todo el tráfico. Para una interfaz en 7 o 30 +días las páginas leen los registros de flujo en lugar de los resúmenes por +hora y por día, así que tardan más y llegan hasta donde se conservan los +registros de flujo (30 días por defecto). + Encima de las páginas: rango de tiempo (de 15 minutos a 30 días, o **Personalizado…** para cualquier inicio y fin, también más allá de 30 días), refresco automático cada 30 segundos y **Copiar enlace**, que copia diff --git a/docs/README.fr.md b/docs/README.fr.md index eb66a16..d56c646 100644 --- a/docs/README.fr.md +++ b/docs/README.fr.md @@ -571,9 +571,18 @@ multipliés par le taux d'échantillonnage. traffic66 les compare aux compteurs d'interface de l'équipement et affiche l'écart dans **Contrôle des interfaces**, avec la cause probable quand il dépasse ce que l'échantillonnage seul explique. Chaque interface a un graphique en bits/s -et un en paquets/s avec l'entrée (vert) et la sortie (bleu) ; les compteurs -de l'équipement sont en pointillés sur le graphique en bits/s. Choisir une -interface dans la liste affiche ses graphiques. +sur toute la largeur et, en dessous, un en paquets/s, avec l'entrée (vert) +et la sortie (bleu) ; les compteurs de l'équipement sont en pointillés sur +le graphique en bits/s. Choisir une interface dans la liste affiche ses +graphiques. + +Chaque ligne de la liste a deux boutons. **✎** donne à l'interface un nom +et une courte étiquette (par exemple *uplink*), affichée partout à côté de +son nom. **☆** en fait l'interface par défaut (**★**) ; il n'y en a +qu'une. Les pages s'ouvrent alors sur elle (voir le choix **Interface** +dans [Utiliser l'interface web](#9-using-the-web-ui)), et la vue +d'ensemble affiche sa bande passante. Les deux sont enregistrés aussitôt +dans la ligne `iface` de Noms. ![Contrôle des interfaces : trafic de chaque interface, et l'estimation des flux à côté du compteur de l'équipement](images/interfaces.png) @@ -631,8 +640,9 @@ device 192.0.2.1 Core router device 192.0.2.9 Branch firewall unsampled device 192.0.2.20 Edge router sampling=1000 -# interface names, by device address and ifIndex; speed in bits per second -iface 192.0.2.1 3 ISP uplink speed=1000000000 +# interface names, by device address and ifIndex; speed in bits per second, +# tag= a short tag, default = the interface the pages open on (one only) +iface 192.0.2.1 3 ISP uplink speed=1000000000 tag=uplink default # host names shown instead of addresses host 10.10.3.27 Finance PC @@ -725,7 +735,7 @@ Pages : | Page | À quoi elle répond | |---|---| -| Vue d'ensemble | Combien de trafic maintenant, par application (**Total**, ou seulement le trafic **Entrant** ou **Sortant** de vos réseaux), par rapport à la même heure hier (périodes jusqu'à un jour), à la semaine dernière (jusqu'à une semaine) ou aux jours précédents (périodes plus longues), quand il y a des données à ce moment-là ; détections ouvertes ; sens et protocole ; principaux clients et services | +| Vue d'ensemble | La bande passante de l'interface choisie (ou de celle par défaut, ou sinon de la plus chargée) en bits/s, entrée et sortie vues par l'interface ; combien de trafic maintenant, par application (**Total**, ou seulement le trafic **Entrant** ou **Sortant** de vos réseaux), par rapport à la même heure hier (périodes jusqu'à un jour), à la semaine dernière (jusqu'à une semaine) ou aux jours précédents (périodes plus longues), quand il y a des données à ce moment-là ; détections ouvertes ; sens et protocole ; principaux clients et services | | Top 66 | S'ouvre sur **Tableau**, un seul tableau du top 66 : par défaut les conversations (client, serveur, service, pays). Chaque en-tête trie ; les colonnes numériques (trafic, paquets, paquet moyen, flux) classent tout le trafic de la période, si bien que le plus petit paquet moyen révèle scans et inondations. **Regrouper par** passe aux applications, réseaux, segments, équipements, encapsulation et VLAN. **Interlocuteurs principaux** montre les 30 premiers clients et serveurs côte à côte avec trafic, paquets et enregistrements de flux, au-dessus d'une ligne pour tout le trafic | | Détails du trafic | Deux graphiques en anneaux. **Serveurs et clients** : l'anneau intérieur montre les 8 serveurs les plus actifs, l'anneau extérieur les clients de chacun ; **Clients au centre** inverse le tout (clients au centre, à l'extérieur les serveurs utilisés par chacun), car un côté en explique souvent plus que l'autre. **Services** : un seul anneau des services les plus chargés. Survolez un segment pour voir son trafic ; cliquez dessus comme sur n'importe quelle valeur | | Chemins du trafic | Quel hôte utilise quelle application vers quel pays : les 8 hôtes les plus actifs, le reste dans Autres. **Client → serveur** affiche client → service → serveur ; **Par segment** affiche les segments au lieu des hôtes. Les noms longs sont raccourcis à 22 caractères ; survolez-en un pour voir le nom complet | @@ -733,7 +743,7 @@ Pages : | Menaces | Hôtes ayant communiqué avec des adresses de vos listes de menaces, et volume envoyé | | Géographie et réseaux | Une carte du monde du trafic par pays, avec des lignes depuis vos réseaux ; les réseaux (AS) d'où venait et où allait le trafic, dans le temps en bits/s et paquets/s ; trafic par pays et par réseau | | Paramètres | Équipements, échantillonnage, pertes, collecteurs, SNMP, la base de données pays et réseaux, le logo et **Noms** | -| Contrôle des interfaces | Trafic de chaque interface dans le temps en bits/s et paquets/s, entrée (vert) et sortie (bleu), avec les compteurs de l'équipement en pointillés ; l'écart entre les chiffres de flux et les compteurs, les pires en premier, avec les causes | +| Contrôle des interfaces | Trafic de chaque interface dans le temps en bits/s et, en dessous, en paquets/s, entrée (vert) et sortie (bleu), avec les compteurs de l'équipement en pointillés ; l'écart entre les chiffres de flux et les compteurs, les pires en premier, avec les causes ; un nom, une étiquette et l'interface par défaut pour chaque interface | | Enregistrements de flux | Combien d'enregistrements de flux il y a eu et quand (une barre par intervalle), et les enregistrements eux-mêmes, du plus récent au plus ancien, page par page, avec colonnes au choix. S'ouvre sur les 15 dernières minutes, mises à jour toutes les 5 secondes ; ouverte depuis une valeur d'une autre page (**Voir ses enregistrements de flux**), elle garde la plage de temps de cette page, et **Revenir au temps réel** y revient | | Nettoyage des données | Supprime les données de plus de 120, 90, 60, 30 ou 7 jours, ou toutes, en indiquant ce que chaque choix libère ([plus](#13-data-backup-upgrade-uninstall)) | | Analyse hors ligne de pcap | Captures de paquets (pcap, pcapng) analysées à part des données en direct ([plus](#analyse-hors-ligne-de-pcap)) | @@ -745,6 +755,19 @@ configuration et données (Paramètres, Enregistrements de flux, Nettoyage des données) et Analyse hors ligne de pcap. Sous le logo figurent la version ainsi que la date et l'heure du serveur. +Au-dessus des pages de trafic (Vue d'ensemble, Top 66, Détails du trafic, +Chemins du trafic, Géographie et réseaux, Enregistrements de flux et le +détail d'une valeur) se trouve **Interface** : **Toutes les interfaces**, +ou une seule interface, pour que ces pages ne montrent que le trafic qui +la traverse (en entrée ou en sortie). Il démarre sur l'interface par +défaut (★, définie dans **Contrôle des interfaces**) et le choix fait +partie du lien. Détections, Menaces, Contrôle des interfaces et Paramètres +couvrent toujours tout le trafic. Pour une interface sur 7 ou 30 jours, +les pages lisent les enregistrements de flux plutôt que les résumés +horaires et journaliers ; elles mettent donc plus de temps et remontent +aussi loin que les enregistrements de flux sont conservés (30 jours par +défaut). + Au-dessus des pages : la plage de temps (de 15 minutes à 30 jours, ou **Personnalisé…** pour n'importe quels début et fin, y compris au-delà de 30 jours), le rafraîchissement automatique toutes les 30 secondes et diff --git a/docs/README.hi.md b/docs/README.hi.md index 0e225b1..e8513a8 100644 --- a/docs/README.hi.md +++ b/docs/README.hi.md @@ -544,10 +544,16 @@ export rate-limited है, इसलिए कम बार sample करें Flow के आँकड़े अनुमान होते हैं: sampled packets गुणा sampling rate। traffic66 इन्हें डिवाइस के अपने interface counters से मिलाता है और फ़र्क़ **इंटरफ़ेस मिलान** पर दिखाता है; जब फ़र्क़ अकेले sampling से समझ में आने -लायक से ज़्यादा हो, तो संभावित कारण भी बताता है। हर interface का एक bits/s -और एक packets/s chart होता है जिसमें ingress (हरा) और egress (नीला) हैं; -डिवाइस के अपने counters bits/s chart पर dashed lines में दिखते हैं। सूची में -कोई interface चुनने पर उसके charts दिखते हैं। +लायक से ज़्यादा हो, तो संभावित कारण भी बताता है। हर interface का एक पूरी चौड़ाई +वाला bits/s chart और उसके नीचे एक packets/s chart होता है, जिनमें ingress (हरा) +और egress (नीला) हैं; डिवाइस के अपने counters bits/s chart पर dashed lines में +दिखते हैं। सूची में कोई interface चुनने पर उसके charts दिखते हैं। + +सूची की हर row में दो बटन हैं। **✎** interface को एक नाम और एक छोटा टैग +(जैसे *uplink*) देता है, जो हर जगह उसके नाम के बगल में दिखता है। **☆** उसे +डिफ़ॉल्ट interface (**★**) बनाता है; डिफ़ॉल्ट एक ही होता है। फिर पेज उसी पर +खुलते हैं ([web UI का इस्तेमाल](#9-using-the-web-ui) में **इंटरफ़ेस** का चुनाव देखें), और सारांश +उसकी bandwidth दिखाता है। दोनों तुरंत **नाम** में `iface` line में सहेजे जाते हैं। ![इंटरफ़ेस मिलान: हर interface का ट्रैफ़िक, और डिवाइस के counter के बगल में flow का अनुमान](images/interfaces.png) @@ -601,8 +607,9 @@ device 192.0.2.1 Core router device 192.0.2.9 Branch firewall unsampled device 192.0.2.20 Edge router sampling=1000 -# interface names, by device address and ifIndex; speed in bits per second -iface 192.0.2.1 3 ISP uplink speed=1000000000 +# interface names, by device address and ifIndex; speed in bits per second, +# tag= a short tag, default = the interface the pages open on (one only) +iface 192.0.2.1 3 ISP uplink speed=1000000000 tag=uplink default # host names shown instead of addresses host 10.10.3.27 Finance PC @@ -688,7 +695,7 @@ application, देश, डिवाइस — पर क्लिक किय | पेज | किस सवाल का जवाब देता है | |---|---| -| सारांश | अभी कितना ट्रैफ़िक है, application के हिसाब से (**कुल**, या आपके नेटवर्क का सिर्फ़ **अंदर आने वाला** या **बाहर जाने वाला** ट्रैफ़िक), कल इसी समय (एक दिन तक की ranges), पिछले हफ़्ते (एक हफ़्ते तक) या पिछले दिनों (लंबी ranges) की तुलना में, अगर उस समय का डेटा हो; खुली संदिग्ध गतिविधियाँ; दिशा और protocol; top clients और services | +| सारांश | चुने हुए interface (या डिफ़ॉल्ट, नहीं तो सबसे व्यस्त) की bandwidth bits/s में, ingress और egress जैसा interface देखता है; अभी कितना ट्रैफ़िक है, application के हिसाब से (**कुल**, या आपके नेटवर्क का सिर्फ़ **अंदर आने वाला** या **बाहर जाने वाला** ट्रैफ़िक), कल इसी समय (एक दिन तक की ranges), पिछले हफ़्ते (एक हफ़्ते तक) या पिछले दिनों (लंबी ranges) की तुलना में, अगर उस समय का डेटा हो; खुली संदिग्ध गतिविधियाँ; दिशा और protocol; top clients और services | | शीर्ष 66 | **तालिका** पर खुलता है, top 66 की एक table: डिफ़ॉल्ट रूप से conversations (client, server, service, देश)। हर column heading से sort होता है; संख्या वाले columns (ट्रैफ़िक, पैकेट, औसत पैकेट, flows) समय-सीमा के पूरे ट्रैफ़िक से top 66 फिर से चुनते हैं, इसलिए सबसे छोटे औसत पैकेट से scan और flood पकड़े जाते हैं। **इसके अनुसार समूह** से applications, नेटवर्क, segments, डिवाइस, encapsulation और VLAN पर जाएँ। **सबसे सक्रिय होस्ट** top 30 clients और servers साथ-साथ दिखाता है, ट्रैफ़िक, पैकेट और flow records के साथ, पूरे ट्रैफ़िक वाली एक row के ऊपर | | ट्रैफ़िक विवरण | दो ring charts। **सर्वर और क्लाइंट**: अंदर का घेरा सबसे व्यस्त 8 servers, बाहर का घेरा हर server के clients; **क्लाइंट अंदर** इसे उलट देता है (clients अंदर, हर client जिन servers का इस्तेमाल करता है वे बाहर), क्योंकि अक्सर एक तरफ़ दूसरी से ज़्यादा समझाती है। **सेवाएँ**: सबसे व्यस्त services का एक घेरा। किसी हिस्से पर पॉइंटर ले जाएँ तो उसका ट्रैफ़िक दिखता है; किसी भी value की तरह उस पर क्लिक करें | | ट्रैफ़िक के रास्ते | कौन-सा host किस देश की ओर किस application का इस्तेमाल करता है: सबसे व्यस्त 8 hosts, बाकी "अन्य" के रूप में। **क्लाइंट → सर्वर** client → service → server दिखाता है; **सेगमेंट के अनुसार** hosts की जगह नेटवर्क दिखाता है। लंबे नाम 22 अक्षरों तक छोटे किए जाते हैं; पूरा नाम देखने के लिए उस पर पॉइंटर ले जाएँ | @@ -696,7 +703,7 @@ application, देश, डिवाइस — पर क्लिक किय | ख़तरे की जानकारी | वे hosts जिन्होंने आपकी threat lists के addresses से बात की, और उन्होंने कितना भेजा | | भूगोल और नेटवर्क | देश के अनुसार ट्रैफ़िक का विश्व मानचित्र, आपके नेटवर्कों से लाइनों के साथ; वे नेटवर्क (AS) जहाँ से ट्रैफ़िक आया और जहाँ गया, समय के साथ bits/s और packets/s में; देश के हिसाब से और नेटवर्क के हिसाब से ट्रैफ़िक | | सेटिंग्स | डिवाइस, sampling, loss, collectors, SNMP, देश और नेटवर्क डेटाबेस, लोगो, और **नाम** | -| इंटरफ़ेस मिलान | समय के साथ हर interface का ट्रैफ़िक bits/s और packets/s में, ingress (हरा) और egress (नीला), डिवाइस counters dashed lines के रूप में; flow के आँकड़े counters से कितने दूर हैं, सबसे ख़राब पहले, कारणों के साथ | +| इंटरफ़ेस मिलान | समय के साथ हर interface का ट्रैफ़िक bits/s में और, नीचे, packets/s में, ingress (हरा) और egress (नीला), डिवाइस counters dashed lines के रूप में; flow के आँकड़े counters से कितने दूर हैं, सबसे ख़राब पहले, कारणों के साथ; हर interface के लिए एक नाम, एक टैग और डिफ़ॉल्ट | | फ़्लो रिकॉर्ड | कितने flow records थे और कब (हर interval के लिए एक bar), और ख़ुद records, सबसे नए पहले, पेज-दर-पेज, चुने जा सकने वाले columns के साथ। पिछले 15 मिनट पर खुलता है और हर 5 सेकंड में अपडेट होता है; किसी दूसरे पेज की value से (**इसके फ़्लो रिकॉर्ड देखें**) खोलने पर उस पेज की समय-सीमा बनी रहती है, और **लाइव पर लौटें** वापस ले आता है | | डेटा सफ़ाई | 120, 90, 60, 30 या 7 दिन से पुराना डेटा, या पूरा डेटा, हटाता है, और बताता है कि हर विकल्प से कितनी जगह खाली होगी ([और](#13-data-backup-upgrade-uninstall)) | | ऑफ़लाइन pcap विश्लेषण | pcap, pcapng कैप्चर का लाइव डेटा से अलग विश्लेषण ([और](#ऑफ़लाइन-pcap-विश्लेषण)) | @@ -706,6 +713,16 @@ application, देश, डिवाइस — पर क्लिक किय जानकारी, भूगोल और नेटवर्क), सेटअप और डेटा (सेटिंग्स, फ़्लो रिकॉर्ड, डेटा सफ़ाई) और ऑफ़लाइन pcap विश्लेषण। लोगो के नीचे version और server की तारीख़ और समय हैं। +ट्रैफ़िक पेजों (सारांश, शीर्ष 66, ट्रैफ़िक विवरण, ट्रैफ़िक के रास्ते, भूगोल और +नेटवर्क, फ़्लो रिकॉर्ड और किसी value का विवरण) के ऊपर **इंटरफ़ेस** है: **सभी +इंटरफ़ेस**, या एक interface, ताकि ये पेज सिर्फ़ उससे होकर गुज़रने वाला ट्रैफ़िक +(अंदर या बाहर) दिखाएँ। यह डिफ़ॉल्ट interface (★, **इंटरफ़ेस मिलान** पर सेट) से +शुरू होता है और यह चुनाव link का हिस्सा है। संदिग्ध गतिविधि, ख़तरे की जानकारी, +इंटरफ़ेस मिलान और सेटिंग्स हमेशा पूरा ट्रैफ़िक दिखाते हैं। 7 या 30 दिन के लिए एक +interface चुनने पर पेज घंटेवार और दैनिक summaries की जगह flow records पढ़ते +हैं, इसलिए उन्हें ज़्यादा समय लगता है और वे उतना ही पीछे जाते हैं जितने समय तक +flow records रखे जाते हैं (डिफ़ॉल्ट रूप से 30 दिन)। + पेजों के ऊपर: time range (15 मिनट से 30 दिन, या किसी भी शुरुआत और अंत के लिए **कस्टम…**, 30 दिन से पहले का भी), हर 30 सेकंड पर automatic refresh, और **लिंक कॉपी करें**, जो ठीक मौजूदा view (पेज, time range और filters) का link diff --git a/docs/README.id.md b/docs/README.id.md index 173be24..0cad292 100644 --- a/docs/README.id.md +++ b/docs/README.id.md @@ -556,10 +556,17 @@ Angka flow adalah estimasi: jumlah paket sampel dikali sampling rate. traffic66 membandingkannya dengan counter interface milik perangkat dan menampilkan selisihnya di **Pencocokan antarmuka**, beserta kemungkinan penyebabnya bila selisih itu lebih besar daripada yang bisa dijelaskan oleh -sampling saja. Setiap interface punya grafik bit/s dan grafik paket/s berisi -ingress (hijau) dan egress (biru); counter milik perangkat sendiri berupa garis -putus-putus di grafik bit/s. Memilih interface di daftar menampilkan -grafiknya. +sampling saja. Setiap interface punya grafik bit/s selebar halaman dan, di +bawahnya, grafik paket/s, berisi ingress (hijau) dan egress (biru); counter +milik perangkat sendiri berupa garis putus-putus di grafik bit/s. Memilih +interface di daftar menampilkan grafiknya. + +Setiap baris daftar punya dua tombol. **✎** memberi interface sebuah nama +dan label pendek (misalnya *uplink*), yang ditampilkan di samping namanya di +mana-mana. **☆** menjadikannya interface bawaan (**★**); hanya ada satu +bawaan. Halaman lalu dibuka pada interface itu (lihat pilihan **Antarmuka** +di [Memakai antarmuka web](#9-using-the-web-ui)), dan Ringkasan menampilkan +bandwidth-nya. Keduanya langsung disimpan ke baris `iface` di Nama. ![Pencocokan antarmuka: trafik setiap interface, dan estimasi flow di samping counter perangkat](images/interfaces.png) @@ -614,8 +621,9 @@ device 192.0.2.1 Core router device 192.0.2.9 Branch firewall unsampled device 192.0.2.20 Edge router sampling=1000 -# interface names, by device address and ifIndex; speed in bits per second -iface 192.0.2.1 3 ISP uplink speed=1000000000 +# interface names, by device address and ifIndex; speed in bits per second, +# tag= a short tag, default = the interface the pages open on (one only) +iface 192.0.2.1 3 ISP uplink speed=1000000000 tag=uplink default # host names shown instead of addresses host 10.10.3.27 Finance PC @@ -704,7 +712,7 @@ Halaman: | Halaman | Pertanyaan yang dijawab | |---|---| -| Ringkasan | Berapa trafik sekarang, per aplikasi (**Total**, atau hanya trafik **Masuk** atau **Keluar** dari jaringan Anda), dibanding waktu yang sama kemarin (rentang hingga satu hari), minggu lalu (hingga satu minggu), atau hari-hari sebelumnya (rentang lebih panjang), bila ada data saat itu; temuan terbuka; arah dan protokol; klien dan layanan teratas | +| Ringkasan | Bandwidth interface yang dipilih (atau yang bawaan, atau kalau tidak ada, yang paling sibuk) dalam bit/s, ingress dan egress dilihat dari interface itu; berapa trafik sekarang, per aplikasi (**Total**, atau hanya trafik **Masuk** atau **Keluar** dari jaringan Anda), dibanding waktu yang sama kemarin (rentang hingga satu hari), minggu lalu (hingga satu minggu), atau hari-hari sebelumnya (rentang lebih panjang), bila ada data saat itu; temuan terbuka; arah dan protokol; klien dan layanan teratas | | Top 66 | Terbuka di **Tabel**, satu tabel 66 teratas: secara default percakapan (klien, server, layanan, negara). Setiap judul kolom mengurutkan; kolom angka (lalu lintas, paket, rata-rata paket, flow) memilih ulang 66 teratas dari semua lalu lintas dalam rentang, sehingga rata-rata paket terkecil menemukan pemindaian dan banjir. **Kelompokkan menurut** beralih ke aplikasi, jaringan, segmen, perangkat, enkapsulasi, dan VLAN. **Pihak teratas** menampilkan 30 klien dan server teratas berdampingan dengan trafik, paket, dan catatan flow, di atas satu baris untuk semua trafik | | Detail trafik | Dua diagram cincin. **Server dan klien**: cincin dalam berisi 8 server tersibuk, cincin luar klien masing-masing; **Klien di dalam** membaliknya (klien di dalam, server yang dipakai masing-masing di luar), karena sering satu sisi lebih menjelaskan daripada sisi lainnya. **Layanan**: satu cincin berisi layanan tersibuk. Arahkan kursor ke segmen untuk melihat trafiknya; klik seperti nilai mana pun | | Jalur trafik | Host mana memakai aplikasi apa menuju negara mana: 8 host tersibuk, sisanya sebagai Lainnya. **Klien → server** menampilkan klien → layanan → server; **Per segmen** menampilkan jaringan, bukan host. Nama panjang dipendekkan menjadi 22 karakter; arahkan kursor ke nama untuk melihatnya utuh | @@ -712,7 +720,7 @@ Halaman: | Intel ancaman | Host yang berkomunikasi dengan alamat di daftar ancaman Anda, dan berapa banyak yang mereka kirim | | Geografi & jaringan | Peta dunia trafik per negara, dengan garis dari jaringan Anda; jaringan (AS) asal dan tujuan trafik, dari waktu ke waktu dalam bit/s dan paket/s; trafik per negara dan per jaringan | | Pengaturan | Perangkat, sampling, loss, collector, SNMP, basis data negara dan jaringan, logo, dan **Nama** | -| Pencocokan antarmuka | Trafik setiap interface dari waktu ke waktu dalam bit/s dan paket/s, ingress (hijau) dan egress (biru), dengan counter perangkat sebagai garis putus-putus; seberapa jauh angka flow dari counter, yang paling buruk di atas, beserta alasannya | +| Pencocokan antarmuka | Trafik setiap interface dari waktu ke waktu dalam bit/s dan, di bawahnya, paket/s, ingress (hijau) dan egress (biru), dengan counter perangkat sebagai garis putus-putus; seberapa jauh angka flow dari counter, yang paling buruk di atas, beserta alasannya; nama, label, dan bawaan untuk setiap interface | | Catatan flow | Berapa banyak catatan flow dan kapan (satu batang per interval), dan catatannya sendiri, terbaru di atas, per halaman, dengan kolom yang bisa dipilih. Terbuka pada 15 menit terakhir, diperbarui setiap 5 detik; bila dibuka dari sebuah nilai di halaman lain (**Lihat catatan flow-nya**), rentang waktu halaman itu dipertahankan, dan **Kembali ke waktu nyata** mengembalikannya | | Pembersihan data | Menghapus data yang lebih lama dari 120, 90, 60, 30, atau 7 hari, atau semuanya, beserta berapa banyak ruang yang dibebaskan masing-masing ([selengkapnya](#13-data-backup-upgrade-uninstall)) | | Analisis pcap offline | Tangkapan paket (pcap, pcapng) dianalisis terpisah dari data langsung ([selengkapnya](#analisis-pcap-offline)) | @@ -723,6 +731,17 @@ ancaman, Geografi & jaringan), pengaturan dan data (Pengaturan, Catatan flow, Pembersihan data), dan Analisis pcap offline. Di bawah logo ada versi serta tanggal dan jam server. +Di atas halaman trafik (Ringkasan, Top 66, Detail trafik, Jalur trafik, +Geografi & jaringan, Catatan flow, dan detail sebuah nilai) ada +**Antarmuka**: **Semua antarmuka**, atau satu interface, sehingga halaman +ini hanya menampilkan trafik yang melewatinya (masuk atau keluar). Awalnya +berada di interface bawaan (★, diatur di **Pencocokan antarmuka**) dan +pilihannya ikut tersimpan di tautan. Temuan, Intel ancaman, Pencocokan +antarmuka, dan Pengaturan selalu mencakup semua trafik. Untuk satu +interface selama 7 atau 30 hari, halaman membaca catatan flow, bukan +ringkasan per jam dan per hari, sehingga lebih lama dan hanya menjangkau +sejauh catatan flow disimpan (default 30 hari). + Di atas halaman: rentang waktu (15 menit sampai 30 hari, atau **Kustom…** untuk awal dan akhir mana pun, juga lebih lama dari 30 hari ke belakang), refresh otomatis setiap 30 detik, dan **Salin tautan**, yang menyalin tautan diff --git a/docs/README.ja.md b/docs/README.ja.md index 12a17dd..567cf6a 100644 --- a/docs/README.ja.md +++ b/docs/README.ja.md @@ -460,7 +460,9 @@ softflowd -i eth0 -n 192.0.2.50:2055 -v 9 -t maxlife=60 ## 6. 数値をインターフェースカウンターと一致させる -フローの数値は推定値です(サンプリングされたパケット数 × サンプリングレート)。traffic66 はこれを機器自身のインターフェースカウンターと比較して **インターフェース照合** に差分を表示し、サンプリングだけでは説明できないほど大きい場合は考えられる原因も示します。各インターフェースには bits/s と packets/s のグラフがあり、受信(緑)と送信(青)を表示します。機器自身のカウンターは bits/s のグラフに破線で表示されます。一覧でインターフェースを選ぶとそのグラフが表示されます。 +フローの数値は推定値です(サンプリングされたパケット数 × サンプリングレート)。traffic66 はこれを機器自身のインターフェースカウンターと比較して **インターフェース照合** に差分を表示し、サンプリングだけでは説明できないほど大きい場合は考えられる原因も示します。各インターフェースには全幅の bits/s のグラフと、その下に packets/s のグラフがあり、受信(緑)と送信(青)を表示します。機器自身のカウンターは bits/s のグラフに破線で表示されます。一覧でインターフェースを選ぶとそのグラフが表示されます。 + +一覧の各行にはボタンが 2 つあります。**✎** はインターフェースに名前と短いタグ(*uplink* など)を付けます。タグはどこでも名前の横に表示されます。**☆** はそれをデフォルトのインターフェース(**★**)にします。デフォルトは 1 つだけです。以後、各ページはそのインターフェースで開き([Web UI の使い方](#9-using-the-web-ui) の **インターフェース** の選択を参照)、概要にはその帯域幅が表示されます。どちらもすぐに **名前** の `iface` 行に保存されます。 ![インターフェース照合:全インターフェースのトラフィックと、フローの推定値と機器のカウンターの並列表示](images/interfaces.png) @@ -494,8 +496,9 @@ device 192.0.2.1 Core router device 192.0.2.9 Branch firewall unsampled device 192.0.2.20 Edge router sampling=1000 -# interface names, by device address and ifIndex; speed in bits per second -iface 192.0.2.1 3 ISP uplink speed=1000000000 +# interface names, by device address and ifIndex; speed in bits per second, +# tag= a short tag, default = the interface the pages open on (one only) +iface 192.0.2.1 3 ISP uplink speed=1000000000 tag=uplink default # host names shown instead of addresses host 10.10.3.27 Finance PC @@ -562,7 +565,7 @@ curl -L https://www.spamhaus.org/drop/drop.txt -o /threats/spamh | ページ | 分かること | |---|---| -| 概要 | 現在のトラフィック量(アプリケーション別。**合計**、または自ネットワークの **内向き** か **外向き** のトラフィックのみ)と、その時点のデータがあれば、昨日の同じ時刻(1 日までの範囲)、先週(1 週間までの範囲)、またはそれ以前の日々(それより長い範囲)との比較、未対応の検知、方向とプロトコル、上位のクライアントとサービス | +| 概要 | 選択したインターフェース(未選択ならデフォルト、それもなければ最も通信量の多いもの)の帯域幅(bits/s、受信と送信はインターフェースから見た向き)、現在のトラフィック量(アプリケーション別。**合計**、または自ネットワークの **内向き** か **外向き** のトラフィックのみ)と、その時点のデータがあれば、昨日の同じ時刻(1 日までの範囲)、先週(1 週間までの範囲)、またはそれ以前の日々(それより長い範囲)との比較、未対応の検知、方向とプロトコル、上位のクライアントとサービス | | 上位 66 | 最初は **表** を表示:上位 66 件を 1 つの表で表示。既定は会話(クライアント、サーバー、サービス、国)。どの列見出しでも並べ替えられます。数値の列(トラフィック、パケット数、平均パケット長、フロー数)は期間内の全トラフィックから上位 66 件を取り直すので、平均パケット長の小さい順でスキャンやフラッドが見つかります。**グループ化** でアプリケーション、ネットワーク、セグメント、機器、カプセル化、VLAN に切り替えられます。**主な通信相手** は上位 30 のクライアントとサーバーを並べてトラフィック、パケット数、フローレコード数とともに示し、その下に全トラフィックの行があります | | トラフィック詳細 | 2 つのリングチャート。**サーバーとクライアント**:内側の輪は通信量の多い 8 サーバー、外側の輪は各サーバーのクライアントです。**クライアントを内側** で逆になります(内側にクライアント、外側に各クライアントが使うサーバー)。片側のほうが多くを語ることがよくあるためです。**サービス**:通信量の多いサービスの輪が 1 つ。セグメントにポインタを合わせるとトラフィック量が表示され、他の値と同じようにクリックできます | | フローの流れ | どのホストがどの国に向けてどのアプリケーションを使っているか。通信量の多い 8 ホストを表示し、残りは「その他」にまとめます。**クライアント → サーバー** でクライアント → サービス → サーバーを表示し、**ネットワーク別** でホストの代わりにネットワークを表示します。長い名前は 22 文字に短縮され、ポインタを合わせると完全な名前が表示されます | @@ -570,13 +573,15 @@ curl -L https://www.spamhaus.org/drop/drop.txt -o /threats/spamh | 脅威インテル | 脅威リスト上のアドレスと通信したホストと、その送信量 | | 地域とネットワーク | 国別トラフィックの世界地図(自社ネットワークからの線付き)、トラフィックの送信元・送信先のネットワーク(AS)の推移(bits/s と packets/s)、国別・ネットワーク別のトラフィック | | 設定 | 機器、サンプリング、ロス、コレクター、SNMP、国・ネットワークデータベース、ロゴ、**名前** | -| インターフェース照合 | 全インターフェースのトラフィックの推移(bits/s と packets/s、受信(緑)と送信(青)、機器のカウンターは破線)と、フローの数値とカウンターの差(差の大きい順、理由付き) | +| インターフェース照合 | 全インターフェースのトラフィックの推移(bits/s とその下に packets/s、受信(緑)と送信(青)、機器のカウンターは破線)と、フローの数値とカウンターの差(差の大きい順、理由付き)、各インターフェースの名前、タグ、デフォルトの指定 | | フローレコード | フローレコードの数とその時期(間隔ごとの棒グラフ)と、レコードそのもの(新しい順、ページ送り、表示列は選択可能)。開くと直近 15 分を表示し、5 秒ごとに更新。他のページの値から開いた場合(**フローレコードを見る**)はそのページの時間範囲を引き継ぎ、**リアルタイムに戻る** で戻る | | データ削除 | 120、90、60、30、7 日より古いデータ、またはすべてのデータを削除。それぞれで空く容量も表示([詳しく](#13-data-backup-upgrade-uninstall)) | | オフライン pcap 分析 | pcap・pcapng のキャプチャをライブデータと分けて分析 ([詳しく](#オフライン-pcap-分析)) | サイドメニューはページを 4 つのグループに分けて並べます:トラフィック(概要、上位 66、トラフィック詳細、フローの流れ、インターフェース照合)、セキュリティ(検知、脅威インテル、地域とネットワーク)、設定とデータ(設定、フローレコード、データ削除)、そしてオフライン pcap 分析。ロゴの下にはバージョンとサーバーの日時が表示されます。 +トラフィック系のページ(概要、上位 66、トラフィック詳細、フローの流れ、地域とネットワーク、フローレコード、値の詳細ページ)の上部には **インターフェース** があります。**すべてのインターフェース** か 1 つのインターフェースを選ぶと、これらのページにはそのインターフェースを通る(受信または送信の)トラフィックだけが表示されます。初期値はデフォルトのインターフェース(★、**インターフェース照合** で設定)で、選択はリンクにも含まれます。検知、脅威インテル、インターフェース照合、設定は常にすべてのトラフィックを対象とします。1 つのインターフェースで 7 日または 30 日を表示する場合、ページは 1 時間ごと・1 日ごとの集計ではなくフロー明細を読むため、時間がかかり、遡れるのはフロー明細の保存期間(デフォルト 30 日)までです。 + ページの上部には、時間範囲(15 分〜30 日、または **期間指定…** で任意の開始・終了。30 日より前も指定可能)、30 秒ごとの自動更新、そして **リンクをコピー** があります。**リンクをコピー** は、現在の表示(ページ、時間範囲、フィルター)そのものへのリンクをコピーするので、同僚に送るのに便利です。**上位 66** と **トラフィック詳細** では、**機器**、**クライアント**、**サーバー**、**サービス** に、時間範囲内で通信量の多い値が並びます。値を選ぶか入力すると絞り込まれ、そのフィルターはボックスを空にするまで全ページに適用されます。言語はブラウザーの設定に従い、メニューの一番下、**ログアウト** の上で変更できます。設定、フローレコード(リアルタイム表示中)、データ削除、オフライン pcap 分析には時間範囲がありません。 言語の隣はカラーテーマで、iOS のシステムカラーに倣っています。**ライト**(デフォルト)、**グレー**、**ブラック**(壁掛けディスプレイ向け)、**ティール**、**オレンジ** があります。クリックするたびに次のテーマに切り替わり、選択はブラウザーに保存されます。 diff --git a/docs/README.ko.md b/docs/README.ko.md index 81d824a..2aff56b 100644 --- a/docs/README.ko.md +++ b/docs/README.ko.md @@ -525,9 +525,16 @@ softflowd -i eth0 -n 192.0.2.50:2055 -v 9 -t maxlife=60 플로 수치는 추정값입니다(샘플링된 패킷 수 × 샘플링 레이트). traffic66은 이를 장비 자체의 인터페이스 카운터와 비교해 **인터페이스 대조**에 차이를 보여 주며, 샘플링만으로 설명되지 않을 -만큼 차이가 크면 가능한 원인도 함께 표시합니다. 인터페이스마다 bits/s와 packets/s 그래프가 -있으며 수신(초록)과 송신(파랑)을 함께 보여 줍니다. 장비 자체의 카운터는 bits/s 그래프에 -점선으로 표시됩니다. 목록에서 인터페이스를 고르면 그 그래프가 표시됩니다. +만큼 차이가 크면 가능한 원인도 함께 표시합니다. 인터페이스마다 전체 폭의 bits/s 그래프와 +그 아래 packets/s 그래프가 있으며 수신(초록)과 송신(파랑)을 함께 보여 줍니다. 장비 자체의 +카운터는 bits/s 그래프에 점선으로 표시됩니다. 목록에서 인터페이스를 고르면 그 그래프가 +표시됩니다. + +목록의 각 행에는 버튼이 두 개 있습니다. **✎**는 인터페이스에 이름과 짧은 태그(*uplink* 등)를 +붙이며, 태그는 어디서나 이름 옆에 표시됩니다. **☆**는 그 인터페이스를 기본 인터페이스(**★**)로 +만듭니다. 기본 인터페이스는 하나뿐입니다. 이후 페이지는 그 인터페이스로 열리고 +([웹 UI 사용법](#9-using-the-web-ui)의 **인터페이스** 선택 참조), 개요에 그 대역폭이 표시됩니다. +둘 다 **이름**의 `iface` 행에 바로 저장됩니다. ![인터페이스 대조: 모든 인터페이스의 트래픽, 그리고 플로 추정값과 장비 카운터를 나란히 표시](images/interfaces.png) @@ -577,8 +584,9 @@ device 192.0.2.1 Core router device 192.0.2.9 Branch firewall unsampled device 192.0.2.20 Edge router sampling=1000 -# interface names, by device address and ifIndex; speed in bits per second -iface 192.0.2.1 3 ISP uplink speed=1000000000 +# interface names, by device address and ifIndex; speed in bits per second, +# tag= a short tag, default = the interface the pages open on (one only) +iface 192.0.2.1 3 ISP uplink speed=1000000000 tag=uplink default # host names shown instead of addresses host 10.10.3.27 Finance PC @@ -660,7 +668,7 @@ curl -L https://www.spamhaus.org/drop/drop.txt -o /threats/spamh | 페이지 | 알 수 있는 것 | |---|---| -| 개요 | 현재 트래픽 양(애플리케이션별. **합계**, 또는 자체 네트워크의 **인바운드**나 **아웃바운드** 트래픽만)과, 그때의 데이터가 있으면 어제 같은 시각(하루 이하 범위), 지난주(일주일 이하) 또는 그 이전 며칠(더 긴 범위) 대비 변화, 미처리 탐지, 방향과 프로토콜, 상위 클라이언트와 서비스 | +| 개요 | 선택한 인터페이스(선택하지 않았으면 기본 인터페이스, 그것도 없으면 가장 바쁜 인터페이스)의 대역폭(bits/s, 수신과 송신은 인터페이스 기준), 현재 트래픽 양(애플리케이션별. **합계**, 또는 자체 네트워크의 **인바운드**나 **아웃바운드** 트래픽만)과, 그때의 데이터가 있으면 어제 같은 시각(하루 이하 범위), 지난주(일주일 이하) 또는 그 이전 며칠(더 긴 범위) 대비 변화, 미처리 탐지, 방향과 프로토콜, 상위 클라이언트와 서비스 | | Top 66 | 처음에는 **표**가 열립니다: 상위 66개를 담은 하나의 표로, 기본은 대화(클라이언트, 서버, 서비스, 국가). 모든 열 제목으로 정렬할 수 있고, 숫자 열(트래픽, 패킷, 평균 패킷 크기, 플로)은 기간 내 전체 트래픽에서 상위 66개를 다시 뽑으므로 평균 패킷 크기가 작은 순으로 스캔과 플러드를 찾을 수 있습니다. **그룹 기준**에서 애플리케이션, 네트워크, 세그먼트, 장비, 캡슐화, VLAN으로 바꿀 수 있습니다. **주요 통신 상대**는 상위 30개 클라이언트와 서버를 트래픽, 패킷, 플로 레코드와 함께 나란히 보여 주며, 그 아래에 전체 트래픽 행이 있습니다 | | 트래픽 상세 | 링 차트 두 개. **서버와 클라이언트**: 안쪽 링은 트래픽이 가장 많은 서버 8개, 바깥쪽 링은 각 서버의 클라이언트입니다. **클라이언트를 안쪽에**는 이를 뒤집습니다(안쪽에 클라이언트, 바깥쪽에 각 클라이언트가 쓰는 서버). 한쪽이 다른 쪽보다 더 많은 것을 설명할 때가 많기 때문입니다. **서비스**: 트래픽이 가장 많은 서비스로 된 링 하나. 조각에 마우스를 올리면 트래픽 양이 보이고, 다른 값처럼 클릭할 수 있습니다 | | 트래픽 경로 | 어느 호스트가 어느 국가로 어느 애플리케이션을 쓰는지: 트래픽이 가장 많은 호스트 8개, 나머지는 기타로 묶음. **클라이언트 → 서버**는 클라이언트 → 서비스 → 서버를 보여 주고, **세그먼트별**은 호스트 대신 세그먼트를 보여 줍니다. 긴 이름은 22자로 줄이며, 마우스를 올리면 전체 이름이 보입니다 | @@ -668,7 +676,7 @@ curl -L https://www.spamhaus.org/drop/drop.txt -o /threats/spamh | 위협 정보 | 위협 목록에 있는 주소와 통신한 호스트와 그 전송량 | | 지역 및 네트워크 | 국가별 트래픽 세계 지도(자체 네트워크에서 뻗는 선 포함), 트래픽이 오간 네트워크(AS)의 시간에 따른 변화(bits/s와 packets/s), 국가별, 네트워크별 트래픽 | | 설정 | 장비, 샘플링, 유실, 수집기, SNMP, 국가 및 네트워크 데이터베이스, 로고, **이름** | -| 인터페이스 대조 | 모든 인터페이스의 시간에 따른 트래픽(bits/s와 packets/s, 수신(초록)과 송신(파랑), 장비 카운터는 점선), 그리고 플로 수치가 카운터와 얼마나 차이 나는지, 차이가 큰 순, 원인 포함 | +| 인터페이스 대조 | 모든 인터페이스의 시간에 따른 트래픽(bits/s와 그 아래 packets/s, 수신(초록)과 송신(파랑), 장비 카운터는 점선), 그리고 플로 수치가 카운터와 얼마나 차이 나는지, 차이가 큰 순, 원인 포함, 각 인터페이스의 이름, 태그, 기본 인터페이스 지정 | | 플로 레코드 | 플로 레코드가 얼마나, 언제 있었는지(간격마다 막대 하나), 그리고 레코드 자체, 최신순, 페이지 단위, 표시할 열 선택 가능. 처음에는 최근 15분을 5초마다 갱신해 표시하며, 다른 페이지의 값에서 열면(**플로 레코드 보기**) 그 페이지의 시간 범위를 유지하고, **실시간으로 돌아가기**로 돌아옴 | | 데이터 정리 | 120, 90, 60, 30, 7일보다 오래된 데이터 또는 모든 데이터를 삭제하며, 각각 얼마나 공간이 확보되는지 표시([자세히](#13-data-backup-upgrade-uninstall)) | | 오프라인 pcap 분석 | pcap·pcapng 캡처를 실시간 데이터와 따로 분석 ([자세히](#오프라인-pcap-분석)) | @@ -678,6 +686,14 @@ curl -L https://www.spamhaus.org/drop/drop.txt -o /threats/spamh 플로 레코드, 데이터 정리), 그리고 오프라인 pcap 분석. 로고 아래에는 버전과 서버의 날짜와 시간이 표시됩니다. +트래픽 페이지(개요, Top 66, 트래픽 상세, 트래픽 경로, 지역 및 네트워크, 플로 레코드, 값의 상세 +페이지) 위쪽에는 **인터페이스**가 있습니다. **모든 인터페이스** 또는 인터페이스 하나를 고르면 +이 페이지들은 그 인터페이스를 지나는(수신 또는 송신) 트래픽만 보여 줍니다. 처음에는 기본 +인터페이스(★, **인터페이스 대조**에서 설정)로 시작하며, 선택은 링크에도 포함됩니다. 탐지, +위협 정보, 인터페이스 대조, 설정은 항상 모든 트래픽을 대상으로 합니다. 인터페이스 하나를 +7일이나 30일로 볼 때는 시간별·일별 요약 대신 플로 레코드를 읽으므로 시간이 더 걸리고, +플로 레코드를 보관하는 기간(기본 30일)까지만 거슬러 올라갈 수 있습니다. + 페이지 위쪽에는 시간 범위(15분~30일, 또는 **직접 지정…** 메뉴로 임의의 시작과 끝, 30일보다 이전도 가능), 30초마다 자동 새로 고침, 그리고 **링크 복사**가 있습니다. **링크 복사**는 현재 보고 있는 화면(페이지, 시간 범위, 필터) 그대로의 링크를 복사하므로 동료에게 보낼 때 diff --git a/docs/README.pt.md b/docs/README.pt.md index f2d8987..3e6dbf2 100644 --- a/docs/README.pt.md +++ b/docs/README.pt.md @@ -554,10 +554,17 @@ Os números de fluxo são estimativas: pacotes amostrados vezes a taxa de amostragem. O traffic66 os compara com os contadores de interface do próprio equipamento e mostra a diferença em **Conferência de interfaces**, com a causa provável quando ela é maior do que a amostragem sozinha -explica. Cada interface tem um gráfico em bits/s e outro em pacotes/s com -a entrada (verde) e a saída (azul); os contadores do próprio equipamento são -linhas tracejadas no gráfico em bits/s. Escolher uma interface na lista -mostra os gráficos dela. +explica. Cada interface tem um gráfico em bits/s na largura toda e, abaixo +dele, outro em pacotes/s, com a entrada (verde) e a saída (azul); os +contadores do próprio equipamento são linhas tracejadas no gráfico em +bits/s. Escolher uma interface na lista mostra os gráficos dela. + +Cada linha da lista tem dois botões. **✎** dá à interface um nome e um +rótulo curto (como *uplink*), mostrado ao lado do nome dela em todo lugar. +**☆** a torna a interface padrão (**★**); só existe uma. As páginas então +abrem nela (veja a opção **Interface** em [Usando a interface +web](#9-using-the-web-ui)), e a visão geral mostra a banda dela. Os dois +são salvos na hora na linha `iface` de Nomes. ![Conferência de interfaces: tráfego de cada interface, e a estimativa de fluxo ao lado do contador do equipamento](images/interfaces.png) @@ -615,8 +622,9 @@ device 192.0.2.1 Core router device 192.0.2.9 Branch firewall unsampled device 192.0.2.20 Edge router sampling=1000 -# interface names, by device address and ifIndex; speed in bits per second -iface 192.0.2.1 3 ISP uplink speed=1000000000 +# interface names, by device address and ifIndex; speed in bits per second, +# tag= a short tag, default = the interface the pages open on (one only) +iface 192.0.2.1 3 ISP uplink speed=1000000000 tag=uplink default # host names shown instead of addresses host 10.10.3.27 Finance PC @@ -707,7 +715,7 @@ Páginas: | Página | O que responde | |---|---| -| Visão geral | Quanto tráfego há agora, por aplicação (**Total**, ou só o tráfego de **Entrada** ou de **Saída** das suas redes), em comparação com o mesmo horário de ontem (intervalos de até um dia), a semana passada (até uma semana) ou os dias anteriores (intervalos mais longos), quando há dados daquela época; detecções abertas; direção e protocolo; principais clientes e serviços | +| Visão geral | A banda da interface escolhida (ou da padrão, ou senão da com mais tráfego) em bits/s, entrada e saída vistas pela interface; quanto tráfego há agora, por aplicação (**Total**, ou só o tráfego de **Entrada** ou de **Saída** das suas redes), em comparação com o mesmo horário de ontem (intervalos de até um dia), a semana passada (até uma semana) ou os dias anteriores (intervalos mais longos), quando há dados daquela época; detecções abertas; direção e protocolo; principais clientes e serviços | | Top 66 | Abre em **Tabela**, uma única tabela dos 66 maiores: por padrão, conversas (cliente, servidor, serviço, país). Qualquer cabeçalho ordena; as colunas numéricas (tráfego, pacotes, pacote médio, fluxos) classificam todo o tráfego do período, então o menor pacote médio revela varreduras e inundações. **Agrupar por** muda para aplicações, redes, segmentos, equipamentos, encapsulamento e VLAN. **Principais interlocutores** mostra os 30 maiores clientes e servidores lado a lado com tráfego, pacotes e registros de fluxo, acima de uma linha para todo o tráfego | | Detalhes do tráfego | Dois gráficos de anéis. **Servidores e clientes**: o anel interno são os 8 servidores com mais tráfego, o externo os clientes de cada um; **Clientes dentro** inverte (clientes dentro, fora os servidores que cada um usa), já que muitas vezes um lado explica mais que o outro. **Serviços**: um anel com os serviços com mais tráfego. Passe o mouse sobre um segmento para ver o tráfego; clique nele como em qualquer valor | | Caminhos do tráfego | Qual host usa qual aplicação para qual país: os 8 hosts com mais tráfego, o resto como Outros. **Cliente → servidor** mostra cliente → serviço → servidor; **Por segmento** mostra segmentos em vez de hosts. Nomes longos são encurtados para 22 caracteres; passe o mouse sobre um para ver o nome completo | @@ -715,7 +723,7 @@ Páginas: | Ameaças | Hosts que se comunicaram com endereços das suas listas de ameaças, e quanto enviaram | | Geografia e redes | Um mapa-múndi do tráfego por país, com linhas a partir das suas redes; as redes (AS) de onde o tráfego veio e para onde foi, ao longo do tempo em bits/s e pacotes/s; tráfego por país e por rede | | Configurações | Equipamentos, amostragem, perdas, coletores, SNMP, o banco de dados de países e redes, o logotipo e **Nomes** | -| Conferência de interfaces | Tráfego de cada interface ao longo do tempo em bits/s e pacotes/s, entrada (verde) e saída (azul), com os contadores do equipamento como linhas tracejadas; quanto os números de fluxo se afastam dos contadores, piores primeiro, com os motivos | +| Conferência de interfaces | Tráfego de cada interface ao longo do tempo em bits/s e, abaixo, pacotes/s, entrada (verde) e saída (azul), com os contadores do equipamento como linhas tracejadas; quanto os números de fluxo se afastam dos contadores, piores primeiro, com os motivos; um nome, um rótulo e a padrão para cada interface | | Registros de fluxo | Quantos registros de fluxo houve e quando (uma barra por intervalo), e os próprios registros, dos mais recentes para os mais antigos, página a página, com colunas selecionáveis. Abre nos últimos 15 minutos, atualizados a cada 5 segundos; aberta a partir de um valor em outra página (**Ver os registros de fluxo**), mantém o intervalo de tempo daquela página, e **Voltar ao tempo real** volta | | Limpeza de dados | Apaga dados com mais de 120, 90, 60, 30 ou 7 dias, ou todos, mostrando quanto cada opção libera ([mais](#13-data-backup-upgrade-uninstall)) | | Análise offline de pcap | Capturas de pacotes (pcap, pcapng) analisadas separadas dos dados ao vivo ([mais](#análise-offline-de-pcap)) | @@ -726,6 +734,17 @@ interfaces), segurança (Detecções, Ameaças, Geografia e redes), configuração e dados (Configurações, Registros de fluxo, Limpeza de dados) e Análise offline de pcap. Abaixo do logotipo ficam a versão e a data e hora do servidor. +Acima das páginas de tráfego (Visão geral, Top 66, Detalhes do tráfego, +Caminhos do tráfego, Geografia e redes, Registros de fluxo e o detalhe de +um valor) fica **Interface**: **Todas as interfaces**, ou uma interface, +para que essas páginas mostrem só o tráfego que passa por ela (entrando ou +saindo). Começa na interface padrão (★, definida em **Conferência de +interfaces**) e a escolha faz parte do link. Detecções, Ameaças, +Conferência de interfaces e Configurações sempre cobrem todo o tráfego. +Para uma interface em 7 ou 30 dias, as páginas leem os registros de fluxo +em vez dos resumos por hora e por dia, então demoram mais e alcançam até +onde os registros de fluxo são mantidos (30 dias por padrão). + Acima das páginas: intervalo de tempo (de 15 minutos a 30 dias, ou **Personalizado…** para qualquer início e fim, inclusive antes dos últimos 30 dias), atualização automática a cada 30 segundos e **Copiar link**, que diff --git a/docs/README.ru.md b/docs/README.ru.md index ed832ff..f2b4837 100644 --- a/docs/README.ru.md +++ b/docs/README.ru.md @@ -553,9 +553,17 @@ sFlow ограничен по скорости, поэтому сэмплиру счётчиками интерфейсов устройства и показывает разницу на странице **Сверка интерфейсов**, а если она больше, чем можно объяснить одним сэмплированием, — и вероятную причину. Для каждого интерфейса есть график в -бит/с и график в пакетах/с с входящим (зелёный) и исходящим (синий) трафиком; -собственные счётчики устройства показаны пунктиром на графике в бит/с. Выбор -интерфейса в списке показывает его графики. +бит/с во всю ширину и под ним график в пакетах/с, с входящим (зелёный) и +исходящим (синий) трафиком; собственные счётчики устройства показаны пунктиром +на графике в бит/с. Выбор интерфейса в списке показывает его графики. + +В каждой строке списка две кнопки. **✎** задаёт интерфейсу имя и короткую +метку (например, *uplink*), которая везде показывается рядом с его именем. +**☆** делает его основным интерфейсом (**★**); основной интерфейс только один. +Тогда страницы открываются на нём (см. выбор **Интерфейс** в разделе +[Работа с веб-интерфейсом](#9-using-the-web-ui)), а обзор показывает его +полосу пропускания. И то и другое сразу сохраняется в строку `iface` в +разделе **Названия**. ![Сверка интерфейсов: трафик каждого интерфейса и оценка по потокам рядом со счётчиком устройства](images/interfaces.png) @@ -609,8 +617,9 @@ device 192.0.2.1 Core router device 192.0.2.9 Branch firewall unsampled device 192.0.2.20 Edge router sampling=1000 -# interface names, by device address and ifIndex; speed in bits per second -iface 192.0.2.1 3 ISP uplink speed=1000000000 +# interface names, by device address and ifIndex; speed in bits per second, +# tag= a short tag, default = the interface the pages open on (one only) +iface 192.0.2.1 3 ISP uplink speed=1000000000 tag=uplink default # host names shown instead of addresses host 10.10.3.27 Finance PC @@ -699,7 +708,7 @@ curl -L https://www.spamhaus.org/drop/drop.txt -o /threats/spamh | Страница | На какой вопрос отвечает | |---|---| -| Обзор | Сколько трафика сейчас, по приложениям (**Всего** или только **Входящий** либо **Исходящий** трафик ваших сетей), в сравнении с тем же временем вчера (диапазоны до суток), прошлой неделей (до недели) или предыдущими днями (более длинные диапазоны), если за то время есть данные; открытые обнаружения; направление и протокол; основные клиенты и сервисы | +| Обзор | Полоса пропускания выбранного интерфейса (или основного, а иначе самого загруженного) в бит/с, вход и выход с точки зрения интерфейса; сколько трафика сейчас, по приложениям (**Всего** или только **Входящий** либо **Исходящий** трафик ваших сетей), в сравнении с тем же временем вчера (диапазоны до суток), прошлой неделей (до недели) или предыдущими днями (более длинные диапазоны), если за то время есть данные; открытые обнаружения; направление и протокол; основные клиенты и сервисы | | Топ 66 | Открывается на вкладке **Таблица** — одной таблице топ 66: по умолчанию сеансы (клиент, сервер, сервис, страна). Любой заголовок сортирует; числовые столбцы (трафик, пакеты, средний пакет, потоки) заново выбирают топ 66 из всего трафика за период, поэтому наименьший средний пакет находит сканирования и флуд. **Группировать по** переключает на приложения, сети, сегменты, устройства, инкапсуляцию и VLAN. **Основные собеседники** показывает топ 30 клиентов и серверов рядом, с трафиком, пакетами и записями потоков, над строкой всего трафика | | Детали трафика | Две кольцевые диаграммы. **Серверы и клиенты**: внутреннее кольцо — 8 самых нагруженных серверов, внешнее — клиенты каждого из них; **Клиенты внутри** переворачивает диаграмму (клиенты внутри, серверы, которыми пользуется каждый, снаружи), потому что одна сторона часто объясняет больше другой. **Сервисы**: одно кольцо самых нагруженных сервисов. Наведите на сегмент, чтобы увидеть его трафик; щёлкните по нему, как по любому значению | | Пути трафика | Какой узел к какому приложению в какой стране обращается: 8 самых активных узлов, остальные как «Прочее». **Клиент → сервер** показывает клиент → сервис → сервер; **По сегментам** показывает сети вместо узлов. Длинные имена сокращаются до 22 символов; наведите на имя, чтобы увидеть его полностью | @@ -707,7 +716,7 @@ curl -L https://www.spamhaus.org/drop/drop.txt -o /threats/spamh | Угрозы | Хосты, обращавшиеся к адресам из ваших списков угроз, и сколько они отправили | | География и сети | Карта мира с трафиком по странам и линиями от ваших сетей; сети (AS), откуда трафик пришёл и куда ушёл, во времени в бит/с и пакетах/с; трафик по странам и по сетям | | Настройки | Устройства, сэмплирование, потери, коллекторы, SNMP, база стран и сетей, логотип и **Названия** | -| Сверка интерфейсов | Трафик каждого интерфейса во времени в бит/с и пакетах/с, вход (зелёный) и выход (синий), со счётчиками устройства пунктиром; насколько цифры по потокам расходятся со счётчиками, худшие сверху, с причинами | +| Сверка интерфейсов | Трафик каждого интерфейса во времени в бит/с и ниже в пакетах/с, вход (зелёный) и выход (синий), со счётчиками устройства пунктиром; насколько цифры по потокам расходятся со счётчиками, худшие сверху, с причинами; имя, метка и выбор основного для каждого интерфейса | | Записи потоков | Сколько было записей потоков и когда (столбик на интервал), и сами записи, новые сверху, постранично, с выбором столбцов. Открывается на последних 15 минутах с обновлением каждые 5 секунд; если открыть её со значения на другой странице (**Показать записи потоков**), сохраняется период той страницы, а **Вернуться к реальному времени** возвращает обратно | | Очистка данных | Удаляет данные старше 120, 90, 60, 30 или 7 дней или все данные и показывает, сколько места освобождает каждый вариант ([подробнее](#13-data-backup-upgrade-uninstall)) | | Офлайн-анализ pcap | Захваты пакетов (pcap, pcapng) анализируются отдельно от живых данных ([подробнее](#офлайн-анализ-pcap)) | @@ -718,6 +727,16 @@ curl -L https://www.spamhaus.org/drop/drop.txt -o /threats/spamh данных) и Офлайн-анализ pcap. Под логотипом показаны версия, дата и время сервера. +Над страницами трафика (Обзор, Топ 66, Детали трафика, Пути трафика, География +и сети, Записи потоков и страница значения) находится **Интерфейс**: **Все +интерфейсы** или один интерфейс, чтобы эти страницы показывали только трафик +через него (вход или выход). Сначала выбран основной интерфейс (★, задаётся +на странице **Сверка интерфейсов**), и выбор входит в ссылку. Обнаружения, +Угрозы, Сверка интерфейсов и Настройки всегда охватывают весь трафик. Для +одного интерфейса за 7 или 30 дней страницы читают записи потоков, а не +почасовые и суточные сводки, поэтому работают дольше и заглядывают назад лишь +на срок хранения записей потоков (по умолчанию 30 дней). + Над страницами: временной диапазон (от 15 минут до 30 дней или **Свой период…** с любым началом и концом, в том числе раньше 30 дней), автообновление каждые 30 секунд и **Скопировать ссылку** — копирует ссылку diff --git a/docs/README.ur.md b/docs/README.ur.md index d02a052..d2dc99f 100644 --- a/docs/README.ur.md +++ b/docs/README.ur.md @@ -545,10 +545,16 @@ rate-limited ہے، اس لیے کم بار sample کریں یا ڈیوائس ک Flow کے اعداد اندازے ہوتے ہیں: sampled packets ضرب sampling rate۔ traffic66 انہیں ڈیوائس کے اپنے interface counters سے ملاتا ہے اور فرق **انٹرفیس جانچ** پر دکھاتا ہے؛ جب فرق صرف sampling سے سمجھ میں آنے والے فرق سے زیادہ ہو تو ممکنہ -وجہ بھی بتاتا ہے۔ ہر interface کا ایک bits/s اور ایک packets/s chart ہے جن میں -ingress (سبز) اور egress (نیلا) ہوتے ہیں؛ ڈیوائس کے اپنے counters bits/s chart پر -ڈیشڈ لکیروں کی صورت میں ہوتے ہیں۔ فہرست میں کوئی interface چننے سے اس کے charts -دکھتے ہیں۔ +وجہ بھی بتاتا ہے۔ ہر interface کا ایک پوری چوڑائی والا bits/s chart اور اس کے نیچے +ایک packets/s chart ہے جن میں ingress (سبز) اور egress (نیلا) ہوتے ہیں؛ ڈیوائس کے +اپنے counters bits/s chart پر ڈیشڈ لکیروں کی صورت میں ہوتے ہیں۔ فہرست میں کوئی +interface چننے سے اس کے charts دکھتے ہیں۔ + +فہرست کی ہر row میں دو بٹن ہیں۔ **✎** interface کو ایک نام اور ایک مختصر ٹیگ +(جیسے *uplink*) دیتا ہے، جو ہر جگہ اس کے نام کے ساتھ دکھتا ہے۔ **☆** اسے ڈیفالٹ +interface (**★**) بناتا ہے؛ ڈیفالٹ ایک ہی ہوتا ہے۔ پھر صفحات اسی پر کھلتے ہیں +([web UI کا استعمال](#9-using-the-web-ui) میں **انٹرفیس** کا انتخاب دیکھیں)، اور جائزہ +اس کی bandwidth دکھاتا ہے۔ دونوں فوراً **نام** میں `iface` لائن میں محفوظ ہو جاتے ہیں۔ ![انٹرفیس جانچ: ہر interface کی ٹریفک، اور ڈیوائس کے counter کے ساتھ flow کا اندازہ](images/interfaces.png) @@ -602,8 +608,9 @@ device 192.0.2.1 Core router device 192.0.2.9 Branch firewall unsampled device 192.0.2.20 Edge router sampling=1000 -# interface names, by device address and ifIndex; speed in bits per second -iface 192.0.2.1 3 ISP uplink speed=1000000000 +# interface names, by device address and ifIndex; speed in bits per second, +# tag= a short tag, default = the interface the pages open on (one only) +iface 192.0.2.1 3 ISP uplink speed=1000000000 tag=uplink default # host names shown instead of addresses host 10.10.3.27 Finance PC @@ -689,7 +696,7 @@ application، ملک، ڈیوائس — پر کلک کیا جا سکتا ہے: | صفحہ | کس سوال کا جواب دیتا ہے | |---|---| -| جائزہ | ابھی کتنی ٹریفک ہے، application کے حساب سے (**کل**، یا آپ کے نیٹ ورکس کی صرف **اندر آنے والی** یا **باہر جانے والی** ٹریفک)، کل اسی وقت کے مقابلے میں (ایک دن تک کی حد)، پچھلے ہفتے کے مقابلے میں (ایک ہفتے تک) یا پچھلے دنوں کے مقابلے میں (لمبی حدیں)، جب اُس وقت کا ڈیٹا موجود ہو؛ کھلی مشتبہ سرگرمیاں؛ سمت اور protocol؛ سرفہرست clients اور services | +| جائزہ | منتخب interface (یا ڈیفالٹ، ورنہ سب سے مصروف) کی bandwidth bits/s میں، ingress اور egress جیسا interface دیکھتا ہے؛ ابھی کتنی ٹریفک ہے، application کے حساب سے (**کل**، یا آپ کے نیٹ ورکس کی صرف **اندر آنے والی** یا **باہر جانے والی** ٹریفک)، کل اسی وقت کے مقابلے میں (ایک دن تک کی حد)، پچھلے ہفتے کے مقابلے میں (ایک ہفتے تک) یا پچھلے دنوں کے مقابلے میں (لمبی حدیں)، جب اُس وقت کا ڈیٹا موجود ہو؛ کھلی مشتبہ سرگرمیاں؛ سمت اور protocol؛ سرفہرست clients اور services | | ٹاپ 66 | **جدول** پر کھلتا ہے، سرفہرست 66 کی ایک table: ڈیفالٹ طور پر conversations (client، server، service، ملک)۔ ہر column heading سے sort ہوتا ہے؛ عددی columns (ٹریفک، پیکٹ، اوسط پیکٹ، flows) وقت کی حد کے پورے ٹریفک سے سرفہرست 66 دوبارہ چنتے ہیں، اس لیے سب سے چھوٹے اوسط پیکٹ سے scan اور flood پکڑے جاتے ہیں۔ **گروپ بندی بلحاظ** سے applications، نیٹ ورکس، segments، ڈیوائسز، encapsulation اور VLAN پر جائیں۔ **سب سے فعال ہوسٹ** سرفہرست 30 clients اور servers ساتھ ساتھ دکھاتا ہے، ٹریفک، پیکٹ اور flow records کے ساتھ، پوری ٹریفک کی ایک row کے اوپر | | ٹریفک کی تفصیل | دو ring charts۔ **سرورز اور کلائنٹس**: اندرونی دائرہ 8 سب سے مصروف servers، بیرونی دائرہ ہر ایک کے clients؛ **کلائنٹس اندر** اسے الٹ دیتا ہے (clients اندر، اور ہر ایک کے استعمال کردہ servers باہر)، کیونکہ اکثر ایک طرف دوسری سے زیادہ وضاحت کرتی ہے۔ **سروسز**: سب سے مصروف services کا ایک دائرہ۔ کسی حصے پر پوائنٹر لے جائیں تو اس کی ٹریفک نظر آتی ہے؛ کسی بھی value کی طرح اس پر click کریں | | ٹریفک کے راستے | کون سا host کس ملک کی طرف کون سی application استعمال کرتا ہے: 8 سب سے مصروف hosts، باقی "دیگر" کے طور پر۔ **کلائنٹ ← سرور** کلائنٹ ← سروس ← سرور دکھاتا ہے؛ **سیگمنٹ کے لحاظ سے** hosts کی جگہ نیٹ ورکس دکھاتا ہے۔ لمبے نام 22 حروف تک مختصر کیے جاتے ہیں؛ پورا نام دیکھنے کے لیے اس پر پوائنٹر لے جائیں | @@ -697,7 +704,7 @@ application، ملک، ڈیوائس — پر کلک کیا جا سکتا ہے: | خطرے کی معلومات | وہ hosts جنہوں نے آپ کی threat lists کے addresses سے بات کی، اور کتنا بھیجا | | مقامات اور نیٹ ورک | ملک کے لحاظ سے ٹریفک کا دنیا کا نقشہ، آپ کے نیٹ ورکس سے لکیروں کے ساتھ؛ وہ نیٹ ورکس (AS) جہاں سے ٹریفک آئی اور جہاں گئی، وقت کے ساتھ bits/s اور packets/s میں؛ ملک کے حساب سے اور نیٹ ورک کے حساب سے ٹریفک | | ترتیبات | ڈیوائسز، sampling، loss، collectors، SNMP، ممالک اور نیٹ ورکس کا ڈیٹابیس، لوگو، اور **نام** | -| انٹرفیس جانچ | وقت کے ساتھ ہر interface کی ٹریفک bits/s اور packets/s میں، ingress (سبز) اور egress (نیلا)، ڈیوائس کے counters ڈیشڈ لکیروں کی صورت میں؛ flow کے اعداد counters سے کتنے دور ہیں، بدترین پہلے، وجوہات کے ساتھ | +| انٹرفیس جانچ | وقت کے ساتھ ہر interface کی ٹریفک bits/s میں اور، نیچے، packets/s میں، ingress (سبز) اور egress (نیلا)، ڈیوائس کے counters ڈیشڈ لکیروں کی صورت میں؛ flow کے اعداد counters سے کتنے دور ہیں، بدترین پہلے، وجوہات کے ساتھ؛ ہر interface کے لیے ایک نام، ایک ٹیگ اور ڈیفالٹ | | فلو ریکارڈ | کتنے flow records تھے اور کب (ہر interval کے لیے ایک bar)، اور خود records، نئے پہلے، صفحہ بہ صفحہ، منتخب کیے جا سکنے والے columns کے ساتھ۔ آخری 15 منٹ پر کھلتا ہے، ہر 5 سیکنڈ میں اپ ڈیٹ ہوتا ہے؛ کسی دوسرے صفحے کی value سے (**اس کے فلو ریکارڈ دکھائیں**) کھولا جائے تو اس صفحے کی وقت کی حد برقرار رکھتا ہے، اور **لائیو پر واپس** دوبارہ لائیو پر لے آتا ہے | | ڈیٹا کی صفائی | 120، 90، 60، 30 یا 7 دن سے پرانا ڈیٹا، یا سارا ڈیٹا حذف کرتا ہے، اور بتاتا ہے کہ ہر انتخاب کتنی جگہ خالی کرتا ہے ([مزید](#13-data-backup-upgrade-uninstall)) | | آف لائن pcap تجزیہ | pcap، pcapng کیپچر کا لائیو ڈیٹا سے الگ تجزیہ ([مزید](#آف-لائن-pcap-تجزیہ)) | @@ -707,6 +714,15 @@ application، ملک، ڈیوائس — پر کلک کیا جا سکتا ہے: مقامات اور نیٹ ورک)، سیٹ اپ اور ڈیٹا (ترتیبات، فلو ریکارڈ، ڈیٹا کی صفائی) اور آف لائن pcap تجزیہ۔ لوگو کے نیچے version اور server کی تاریخ اور وقت ہوتے ہیں۔ +ٹریفک کے صفحات (جائزہ، ٹاپ 66، ٹریفک کی تفصیل، ٹریفک کے راستے، مقامات اور نیٹ ورک، +فلو ریکارڈ اور کسی value کی تفصیل) کے اوپر **انٹرفیس** ہے: **تمام انٹرفیس**، یا ایک +interface، تاکہ یہ صفحات صرف اس سے گزرنے والی ٹریفک (اندر یا باہر) دکھائیں۔ یہ +ڈیفالٹ interface (★، **انٹرفیس جانچ** پر مقرر) سے شروع ہوتا ہے اور یہ انتخاب link +کا حصہ ہے۔ مشتبہ سرگرمی، خطرے کی معلومات، انٹرفیس جانچ اور ترتیبات ہمیشہ پوری +ٹریفک دکھاتے ہیں۔ 7 یا 30 دن کے لیے ایک interface چننے پر صفحات گھنٹہ وار اور +روزانہ summaries کی بجائے flow records پڑھتے ہیں، اس لیے زیادہ وقت لیتے ہیں اور +اتنا ہی پیچھے جاتے ہیں جتنی دیر flow records رکھے جاتے ہیں (ڈیفالٹ طور پر 30 دن)۔ + صفحات کے اوپر: time range (15 منٹ سے 30 دن، یا کسی بھی آغاز اور اختتام کے لیے **اپنی مرضی…**، 30 دن سے پہلے کا بھی)، ہر 30 سیکنڈ پر automatic refresh، اور **لنک کاپی کریں**، جو بالکل موجودہ view (صفحہ، time range اور filters) کا link diff --git a/docs/README.zh.md b/docs/README.zh.md index ea35312..02ebab1 100644 --- a/docs/README.zh.md +++ b/docs/README.zh.md @@ -460,7 +460,9 @@ softflowd -i eth0 -n 192.0.2.50:2055 -v 9 -t maxlife=60 ## 6. 让统计结果与接口计数器对上 -流统计是估算值:采样到的报文数乘以采样率。traffic66 会将其与设备自身的接口计数器比对,在 **接口对账** 中显示差值;差值超出采样本身所能解释的范围时,还会给出可能的原因。每个接口有 bits/s 和 packets/s 两张图,入向为绿色、出向为蓝色;设备自身的计数器以虚线显示在 bits/s 图上。在列表中选中一个接口即可查看它的图表。 +流统计是估算值:采样到的报文数乘以采样率。traffic66 会将其与设备自身的接口计数器比对,在 **接口对账** 中显示差值;差值超出采样本身所能解释的范围时,还会给出可能的原因。每个接口有一张占满整行宽度的 bits/s 图,其下是一张 packets/s 图,入向为绿色、出向为蓝色;设备自身的计数器以虚线显示在 bits/s 图上。在列表中选中一个接口即可查看它的图表。 + +列表的每一行有两个按钮。**✎** 给接口起名字并加一个简短标识(如 *uplink*),在所有地方都显示在它的名称旁边。**☆** 把它设为默认接口(**★**);默认接口只有一个。之后各页面打开时就看它(见 [使用 Web 界面](#9-using-the-web-ui) 中的 **接口** 选项),概览也会显示它的带宽。两者都会立即保存到 **名称** 中的 `iface` 行。 ![接口对账:每个接口的流量,以及流量估算值与设备计数器并列对比](images/interfaces.png) @@ -494,8 +496,9 @@ device 192.0.2.1 Core router device 192.0.2.9 Branch firewall unsampled device 192.0.2.20 Edge router sampling=1000 -# interface names, by device address and ifIndex; speed in bits per second -iface 192.0.2.1 3 ISP uplink speed=1000000000 +# interface names, by device address and ifIndex; speed in bits per second, +# tag= a short tag, default = the interface the pages open on (one only) +iface 192.0.2.1 3 ISP uplink speed=1000000000 tag=uplink default # host names shown instead of addresses host 10.10.3.27 Finance PC @@ -562,7 +565,7 @@ curl -L https://www.spamhaus.org/drop/drop.txt -o /threats/spamh | 页面 | 回答什么问题 | |---|---| -| 概览 | 当前流量多大,按应用拆分(**合计**,或只看本方网络的 **入站** 或 **出站** 流量),并与昨天同一时间(时间范围不超过一天)、上周(不超过一周)或前几天(更长的范围)对比,前提是那时有数据;未处理的发现;方向和协议;主要客户端和服务 | +| 概览 | 所选接口(未选时为默认接口,再没有则为最繁忙的接口)的带宽,单位 bits/s,入向和出向以接口为准;当前流量多大,按应用拆分(**合计**,或只看本方网络的 **入站** 或 **出站** 流量),并与昨天同一时间(时间范围不超过一天)、上周(不超过一周)或前几天(更长的范围)对比,前提是那时有数据;未处理的发现;方向和协议;主要客户端和服务 | | Top 66 | 打开时显示 **表格**,一张前 66 名的表:默认是会话(客户端、服务器、服务、国家)。每个列标题都能排序;数字列(流量、包数、平均包长、流数)按时间范围内的全部流量重新取前 66 名,按平均包长从小到大排能找出扫描和泛洪。**分组方式** 可切换到应用、网络、网段、设备、封装和 VLAN。**主要通信方** 把前 30 名客户端和服务器并排列出,附流量、包数和流记录数,下方有一行全部流量 | | 流量明细 | 两张环形图。**服务器与客户端**:内环是流量最大的 8 台服务器,外环是每台服务器的客户端;**客户端在内环** 则反过来(客户端在内,各自访问的服务器在外),因为往往一边比另一边更能说明问题。**服务**:一个由流量最大的服务组成的环。鼠标指向某一段可看到它的流量;像其他值一样点击它 | | 流向 | 哪台主机在访问哪个国家的哪个应用:流量最大的 8 台主机,其余归为“其他”。**客户端 → 服务器** 显示客户端 → 服务 → 服务器;**按网段** 显示网段而不是主机。长名称截短为 22 个字符,鼠标指向可看到完整名称 | @@ -570,13 +573,15 @@ curl -L https://www.spamhaus.org/drop/drop.txt -o /threats/spamh | 威胁情报 | 与威胁情报列表中地址有通信的主机,以及它们发送了多少流量 | | 地理与运营商 | 世界地图上按国家显示的流量,并有从你的网段出发的连线;流量来自和去往哪些网络(AS),以 bits/s 和 packets/s 显示随时间的变化;按国家和按网络统计的流量 | | 设定 | 设备、采样、丢包、采集器、SNMP、国家和运营商数据库、Logo,以及 **名称** | -| 接口对账 | 每个接口的流量随时间变化,单位为 bits/s 和 packets/s,入向(绿色)和出向(蓝色),设备计数器以虚线显示;以及流统计与计数器相差多少,差异最大的在前,附原因 | +| 接口对账 | 每个接口的流量随时间变化,单位为 bits/s,下方为 packets/s,入向(绿色)和出向(蓝色),设备计数器以虚线显示;以及流统计与计数器相差多少,差异最大的在前,附原因;每个接口的名称、标识以及默认接口 | | 流记录 | 有多少条流记录、出现在什么时候(每个间隔一根柱),以及流记录本身,最新的在前,分页显示,可选择显示列。打开时显示最近 15 分钟,每 5 秒更新;从其他页面的某个值打开(**看它的流记录**)时沿用该页面的时间范围,**回到实时** 可返回 | | 数据清理 | 删除早于 120、90、60、30 或 7 天的数据,或全部数据,并显示每种选择能腾出多少空间([详见](#13-data-backup-upgrade-uninstall)) | | 离线 pcap 分析 | 在实时数据之外分析抓包文件(pcap、pcapng) ([详情](#离线-pcap-分析)) | 侧边菜单把页面分为四组:流量(概览、Top 66、流量明细、流向、接口对账)、安全(发现、威胁情报、地理与运营商)、配置与数据(设定、流记录、数据清理)以及离线 pcap 分析。Logo 下方显示版本号以及服务器的日期和时间。 +流量类页面(概览、Top 66、流量明细、流向、地理与运营商、流记录以及某个值的详情页)上方有 **接口**:**全部接口**,或某一个接口,这样这些页面只显示经过该接口(进或出)的流量。初始为默认接口(★,在 **接口对账** 中设置),所选接口也包含在链接中。发现、威胁情报、接口对账和设定始终覆盖全部流量。单个接口选 7 天或 30 天时,页面读取的是流明细而不是小时和每日汇总,因此耗时更长,且最远只能回溯到流明细的保留期限(默认 30 天)。 + 页面上方有:时间范围(15 分钟到 30 天,或 **自定义…** 任意指定开始和结束时间,也可以早于 30 天)、每 30 秒自动刷新,以及**复制链接**——复制一个精确指向当前视图(页面、时间范围和过滤条件)的链接,方便发给同事。在 **Top 66** 和 **流量明细** 中,**设备**、**客户端**、**服务端** 和 **服务** 列出该时间范围内流量最大的值:选择或输入一个值即可过滤;过滤条件随后对所有页面生效,直到清空输入框。界面语言跟随浏览器设置,可在菜单底部、**退出登录** 上方切换。设定、流记录(实时显示时)、数据清理和离线 pcap 分析没有时间范围。 语言旁边是颜色主题,参照 iOS 的系统颜色:**浅色**(默认)、**灰**、**黑**(适合挂墙大屏)、**青** 和 **桔**。每点击一次就切换到下一个;所选主题保存在浏览器中。 diff --git a/docs/images/interfaces.png b/docs/images/interfaces.png index 7ccfaf2..7d60984 100644 Binary files a/docs/images/interfaces.png and b/docs/images/interfaces.png differ diff --git a/docs/images/overview-zh.png b/docs/images/overview-zh.png index a776248..6fef6d4 100644 Binary files a/docs/images/overview-zh.png and b/docs/images/overview-zh.png differ diff --git a/docs/images/overview.png b/docs/images/overview.png index eb77262..f8a952e 100644 Binary files a/docs/images/overview.png and b/docs/images/overview.png differ diff --git a/internal/api/handlers.go b/internal/api/handlers.go index 2e6cd01..00c3c51 100644 --- a/internal/api/handlers.go +++ b/internal/api/handlers.go @@ -377,12 +377,14 @@ func (s *Server) ifaces(w http.ResponseWriter, r *http.Request) { } type item struct { store.IfaceInfo - Name string `json:"name"` - Device string `json:"device"` - InDev float64 `json:"in_dev"` - OutDev float64 `json:"out_dev"` - Err float64 `json:"stat_err"` - HasCtr bool `json:"has_counters"` + Name string `json:"name"` + Tag string `json:"tag,omitempty"` + Default bool `json:"default,omitempty"` + Device string `json:"device"` + InDev float64 `json:"in_dev"` + OutDev float64 `json:"out_dev"` + Err float64 `json:"stat_err"` + HasCtr bool `json:"has_counters"` } var out []item for i, f := range list { @@ -393,7 +395,7 @@ func (s *Server) ifaces(w http.ResponseWriter, r *http.Request) { if a, err := netip.ParseAddr(f.Exporter); err == nil { it.Device = s.Inv.Device(a) ifc := s.Inv.Iface(a, f.IfIndex) - it.Name = ifc.Name + it.Name, it.Tag, it.Default = ifc.Name, ifc.Tag, ifc.Default if it.Speed == 0 { it.Speed = ifc.Speed } @@ -405,7 +407,7 @@ func (s *Server) ifaces(w http.ResponseWriter, r *http.Request) { } out = append(out, it) } - writeJSON(w, http.StatusOK, map[string]any{"ifaces": out}) + writeJSON(w, http.StatusOK, map[string]any{"ifaces": out, "default": s.Inv.DefaultIface()}) } func (s *Server) recon(w http.ResponseWriter, r *http.Request) { @@ -684,3 +686,28 @@ func (s *Server) licenseState() any { } return s.License.State() } + +// putIface names, tags or marks one interface as the default. +func (s *Server) putIface(w http.ResponseWriter, r *http.Request) { + var in struct { + Exporter string `json:"exporter"` + IfIndex uint32 `json:"ifindex"` + Name string `json:"name"` + Tag string `json:"tag"` + Default bool `json:"default"` + } + if err := json.NewDecoder(http.MaxBytesReader(w, r.Body, 1<<16)).Decode(&in); err != nil { + fail(w, err) + return + } + a, err := netip.ParseAddr(in.Exporter) + if err != nil || in.IfIndex == 0 { + fail(w, errors.New("bad interface")) + return + } + if err := s.Inv.SetIface(a, in.IfIndex, in.Name, in.Tag, in.Default); err != nil { + fail(w, err) + return + } + writeJSON(w, http.StatusOK, map[string]string{"ok": "saved"}) +} diff --git a/internal/api/server.go b/internal/api/server.go index e5b5347..aed47f8 100644 --- a/internal/api/server.go +++ b/internal/api/server.go @@ -104,6 +104,7 @@ func (s *Server) Handler() http.Handler { api("POST /api/resolve", s.resolve) api("GET /api/inventory", s.getInventory) api("POST /api/inventory", s.putInventory) + api("POST /api/iface", s.putIface) api("GET /api/findings", s.data((*Server).findings)) api("POST /api/findings", s.data((*Server).setFindings)) api("GET /api/cleanup", s.getCleanup) diff --git a/internal/enrich/enrich.go b/internal/enrich/enrich.go index 05f4667..1bea77a 100644 --- a/internal/enrich/enrich.go +++ b/internal/enrich/enrich.go @@ -48,8 +48,10 @@ type Network struct { // Iface is a named interface of an exporter. type Iface struct { - Name string - Speed uint64 // bits per second, 0 if unknown + Name string + Speed uint64 // bits per second, 0 if unknown + Tag string // a short label such as "uplink" (tag=) + Default bool // the interface the pages show by default (default) } // Inventory holds operator-provided names. All fields are optional. @@ -193,6 +195,14 @@ func (inv *Inventory) Parse(text string) error { it.Speed, _ = strconv.ParseUint(strings.TrimPrefix(w, "speed="), 10, 64) continue } + if strings.HasPrefix(w, "tag=") { + it.Tag = strings.TrimPrefix(w, "tag=") + continue + } + if w == "default" { + it.Default = true + continue + } words = append(words, w) } it.Name = strings.Join(words, " ") @@ -248,6 +258,80 @@ func (inv *Inventory) Save(text string) error { return os.WriteFile(inv.path, []byte(text), 0o644) } +// DefaultIface is the interface marked default, as "exporter/ifindex". +func (inv *Inventory) DefaultIface() string { + inv.mu.RLock() + defer inv.mu.RUnlock() + for k, it := range inv.ifaces { + if it.Default { + return k + } + } + return "" +} + +// SetIface names, tags or marks as default one interface, editing its +// iface line in the names (or adding one). Only one interface is default. +func (inv *Inventory) SetIface(exporter netip.Addr, idx uint32, name, tag string, def bool) error { + name = strings.Join(strings.Fields(name), " ") + tag = strings.Join(strings.Fields(tag), "_") + if name == "" { + name = fmt.Sprintf("#%d", idx) + } + lines := strings.Split(strings.TrimRight(inv.Text(), "\n"), "\n") + if len(lines) == 1 && lines[0] == "" { + lines = nil + } + isIface := func(f []string) bool { + return len(f) >= 3 && f[0] == "iface" && f[1] == exporter.String() && f[2] == strconv.FormatUint(uint64(idx), 10) + } + var speed string + out := make([]string, 0, len(lines)+1) + at := -1 + for _, ln := range lines { + var f []string + if t := strings.TrimSpace(ln); !strings.HasPrefix(t, "#") { + f = strings.Fields(t) + } + if isIface(f) { + for _, w := range f[3:] { + if strings.HasPrefix(w, "speed=") { + speed = w + } + } + if at < 0 { + at = len(out) + out = append(out, "") + } + continue + } + if def && len(f) > 0 && f[0] == "iface" { + // only one default: take it off the other interfaces + if strings.Contains(" "+ln+" ", " default ") { + ln = strings.Replace(" "+ln+" ", " default ", " ", 1) + ln = strings.TrimSpace(ln) + } + } + out = append(out, ln) + } + line := fmt.Sprintf("iface %s %d %s", exporter, idx, name) + if speed != "" { + line += " " + speed + } + if tag != "" { + line += " tag=" + tag + } + if def { + line += " default" + } + if at < 0 { + out = append(out, line) + } else { + out[at] = line + } + return inv.Save(strings.Join(out, "\n") + "\n") +} + func (inv *Inventory) Text() string { inv.mu.RLock() defer inv.mu.RUnlock() diff --git a/internal/enrich/iface_test.go b/internal/enrich/iface_test.go new file mode 100644 index 0000000..2b83d34 --- /dev/null +++ b/internal/enrich/iface_test.go @@ -0,0 +1,39 @@ +package enrich + +import ( + "net/netip" + "strings" + "testing" +) + +func TestSetIface(t *testing.T) { + inv := NewInventory() + if err := inv.Save("# names\niface 10.0.0.1 3 ISP uplink speed=1000000000 default\ndevice 10.0.0.1 Core\n"); err != nil { + t.Fatal(err) + } + a := netip.MustParseAddr("10.0.0.1") + // name and tag a new interface and make it the default + if err := inv.SetIface(a, 10, "Telecom 100G", "uplink", true); err != nil { + t.Fatal(err) + } + if it := inv.Iface(a, 10); it.Name != "Telecom 100G" || it.Tag != "uplink" || !it.Default { + t.Fatalf("iface 10 %+v", it) + } + if it := inv.Iface(a, 3); it.Default || it.Speed != 1000000000 || it.Name != "ISP uplink" { + t.Fatalf("iface 3 %+v", it) + } + if inv.DefaultIface() != "10.0.0.1/10" { + t.Fatalf("default %q", inv.DefaultIface()) + } + // rename keeps the speed and the place of the line + if err := inv.SetIface(a, 3, "ISP #2", "", false); err != nil { + t.Fatal(err) + } + txt := inv.Text() + if !strings.Contains(txt, "iface 10.0.0.1 3 ISP #2 speed=1000000000\n") || !strings.HasPrefix(txt, "# names\niface 10.0.0.1 3") { + t.Fatalf("text %q", txt) + } + if it := inv.Iface(a, 3); it.Name != "ISP #2" { + t.Fatalf("iface 3 %+v", it) + } +} diff --git a/internal/web/static/app.css b/internal/web/static/app.css index beda1e7..7f97196 100644 --- a/internal/web/static/app.css +++ b/internal/web/static/app.css @@ -349,3 +349,15 @@ label.btn.disabled{opacity:.5;cursor:not-allowed!important} .lic.trial_over b{color:var(--crit)} .lic.licensed b{color:var(--good);font-weight:600} .lic .muted{margin-inline-start:8px;font-size:12px} +.ifsel{display:flex;align-items:center;gap:6px;margin-inline-start:auto;font-size:13px;color:var(--ink-3)} +.ifsel select{border:1px solid var(--line-2);border-radius:7px;padding:5px 8px;background:var(--surface);color:var(--ink);max-width:220px;text-overflow:ellipsis;font-weight:600} +.ifsel:not([hidden])+.range{margin-inline-start:0} +.iftag{display:inline-block;margin-inline-start:6px;padding:0 6px;border-radius:9px;background:var(--accent-soft);color:var(--accent-ink);font-size:11.5px;font-weight:600;line-height:18px;vertical-align:1px} +.iflist .ifrow{display:flex;align-items:center;gap:6px} +.iflist .ifrow>button:first-child{flex:1} +.ifstar,.ifedit{border:0;background:none;cursor:pointer;color:var(--ink-3);font-size:15px;padding:4px 6px;border-radius:6px} +.ifstar.on{color:#e6a700} +.ifstar:hover,.ifedit:hover{background:var(--surface-2);color:var(--ink)} +.ifform{display:grid;grid-template-columns:1fr 120px auto auto;gap:6px;padding:8px 10px;background:var(--surface-2);border-radius:8px;margin:2px 0 6px} +.ifform input{border:1px solid var(--line-2);border-radius:6px;padding:5px 8px;background:var(--surface);color:var(--ink);min-width:0} +.iflist .ifstar,.iflist .ifedit,.iflist .ifform button{width:auto;flex:none;justify-content:center} diff --git a/internal/web/static/app.js b/internal/web/static/app.js index aba7f8f..68c3604 100644 --- a/internal/web/static/app.js +++ b/internal/web/static/app.js @@ -161,6 +161,7 @@ function readHash() { state.ra = p.get('ra') === 'client' ? 'client' : 'server'; state.ds = p.get('ds') === 'sb' ? 'sb' : ''; state.rl = p.get('live') === '1'; + if (p.get('if')) state.ifv = p.get('if'); const dd = p.get('d'); if (dd && dd.includes(':')) state.det = {f: dd.slice(0, dd.indexOf(':')), v: dd.slice(dd.indexOf(':') + 1)}; state.f = (p.get('f') || '').split(',').filter(Boolean).map(s => { const neg = s[0] === '!'; if (neg) s = s.slice(1); @@ -175,6 +176,7 @@ function writeHash(push) { if (state.v === 'topn') { if (state.tm === 'talkers') p.set('tm', 'talkers'); else p.set('dim', state.dim); } if (state.v === 'sankey' && state.sk !== 'host') p.set('by', state.sk); if (state.v === 'records' && state.rl) p.set('live', '1'); + if (state.ifv && state.ifv !== 'all' && IFV_VIEWS.has(state.v)) p.set('if', state.ifv); if (state.v === 'traffic') { if (state.ra === 'client') p.set('ra', 'client'); } if (state.v === 'detail' && state.det) p.set('d', state.det.f + ':' + state.det.v); if (state.f.length) p.set('f', state.f.map(x => (x.neg ? '!' : '') + encodeURIComponent(x.f) + ':' + encodeURIComponent(x.v)).join(',')); @@ -193,9 +195,39 @@ function tickClock() { try { $('#clock').textContent = new Intl.DateTimeFormat(LANG, {month: '2-digit', day: '2-digit', hour: '2-digit', minute: '2-digit', second: '2-digit'}).format(new Date(Date.now() + clockSkew)); } catch (e) {} } setInterval(tickClock, 1000); +// The interface picked at the top (or the one marked default) limits the +// traffic pages to the flows through it; findings, threat intel, interface +// check and settings stay as they are. +const IFV_VIEWS = new Set(['overview', 'topn', 'traffic', 'sankey', 'geo', 'records', 'detail']); +const IFV_DATA = new Set(['overview', 'topn', 'series', 'sankey', 'records', 'rings', 'geolines']); +const ifScoped = path => state.ifv && state.ifv !== 'all' && IFV_VIEWS.has(state.v) && IFV_DATA.has(path) && !inSB(); +let ifList = null, ifListKey = ''; +// the interfaces of the range (busiest first) and the default one, cached a minute +async function loadIfaces() { + const k = state.r + (state.r === 'custom' ? state.cf + '-' + state.ct : '') + Math.floor(Date.now() / 6e4); + if (ifList && ifListKey === k) return ifList; + try { ifList = await api('ifaces'); ifListKey = k; } catch (e) { ifList = ifList || {ifaces: []}; } + return ifList; +} +async function renderIfsel() { + const w = $('#ifselWrap'), show = IFV_VIEWS.has(state.v) && !inSB() && !offlineMode; + w.hidden = !show; + if (!show) return; + const d = await loadIfaces(), list = d.ifaces || []; + if (state.ifv === undefined) state.ifv = d.default || 'all'; + const key = f => f.exporter + '/' + f.ifindex; + const opts = [['all', t('if.all')], ...list.map(f => [key(f), (f.default ? '★ ' : '') + ifName(f) + (f.tag ? ' [' + f.tag + ']' : ''), (f.device || f.exporter) + ' · ' + f.ifindex])]; + if (state.ifv !== 'all' && !list.some(f => key(f) === state.ifv)) opts.push([state.ifv, state.ifv]); + const sel = $('#ifsel'); + sel.innerHTML = opts.map(([v, l, tt]) => ``).join(''); + sel.value = state.ifv; + sel.classList.toggle('on', state.ifv !== 'all'); + sel.title = sel.selectedOptions[0]?.title || ''; +} async function api(path, extra = {}, filters = state.f) { if (inSB() && (path === 'ifaces' || path === 'recon')) return {ifaces: []}; const p = new URLSearchParams(inSB() && SB_DATA.has(path) ? {ds: 'sb', ...sbRange(), ...extra} : extra.range ? extra : state.r === 'custom' ? {from: state.cf, to: state.ct, ...extra} : {range: state.r, ...extra}); + if (ifScoped(path) && !filters.some(x => x.f === 'iface')) filters = [...filters, {f: 'iface', v: state.ifv, neg: false}]; if (filters.length) p.set('f', JSON.stringify(filters.map(x => ({f: x.f, v: x.v, neg: x.neg})))); const res = await fetch('/api/' + path + '?' + p); if (res.status === 401) { showLogin(); throw new Error('login'); } @@ -501,7 +533,12 @@ const baseText = (d, kind) => { views.overview = async (el) => { // total, or only inbound or only outbound traffic (direction from your networks' point of view) const od = ['inbound', 'outbound'].includes(state.od) ? state.od : ''; - const [d, ifs, fd] = await Promise.all([api('overview', {}, od ? [...state.f, {f: 'dir', v: od, neg: false}] : state.f), api('ifaces').catch(() => null), api('findings', {limit: 3}).catch(() => null)]); + const [d, ifs, fd] = await Promise.all([api('overview', {}, od ? [...state.f, {f: 'dir', v: od, neg: false}] : state.f), inSB() ? null : loadIfaces(), api('findings', {limit: 3}).catch(() => null)]); + // the interface chart: the interface picked at the top, else the default, else the busiest + const ifl = ifs?.ifaces || [], ikey = f => f.exporter + '/' + f.ifindex; + const ifk = state.ifv && state.ifv !== 'all' ? state.ifv : (ifs?.default || (ifl[0] ? ikey(ifl[0]) : '')); + const ifSel = ifl.find(f => ikey(f) === ifk); + const [iIn, iOut] = ifk && !inSB() ? await Promise.all(['if_in', 'if_out'].map(by => api('series', {by, measure: 'wire', top: 20, dup: 1}, [...state.f, {f: 'iface', v: ifk, neg: false}]).catch(() => null))) : [null, null]; const tot = d.totals, base = d.base_totals, basis = d.basis; const change = basis && base.wire > 0 ? (tot.wire - base.wire) / base.wire : null; // accuracy: worst interface deviation relative to its statistical error @@ -529,6 +566,9 @@ views.overview = async (el) => {
${t('kpi.peers')}
${nf(tot.peers)}
${esc(t('kpi.countries', {n: nf(tot.countries)}))}
${t('kpi.accuracy')}
${acc.n}
${acc.kind ? status(acc.kind, acc.d) : `${esc(acc.d)}`}
+ ${iIn ? `

${t('if.bw')} · ${esc(ifSel ? ifName(ifSel) : ifk)}${ifSel?.tag ? `${esc(ifSel.tag)}` : ''}

${esc(t('ov.if_sub'))}
+
+
${t('if.in')}${t('if.out')}
` : ''}

${t({'': 'ov.bw_all', inbound: 'ov.bw_in', outbound: 'ov.bw_out'}[od])}

${lines.length ? esc(baseText(d, 'sub')) : ''}
${[['', 'ov.dir_total'], ['inbound', 'dir.2'], ['outbound', 'dir.1']].map(([k, l]) => ``).join('')}
@@ -542,6 +582,10 @@ views.overview = async (el) => { ${fd ? findingsPanel(fd) : ''}
`; tsChart($('#chStack'), {times: series.times, areas, lines}); + if (iIn) { + const pk = s => { const i = (s?.names || []).indexOf(ifk); return i < 0 ? (s?.times || []).map(() => 0) : s.values[i]; }; + tsChart($('#chIf'), {times: iIn.times, lines: [{name: t('if.in'), color: IF_IN, data: pk(iIn), fill: true}, {name: t('if.out'), color: IF_OUT, data: pk(iOut), fill: true}]}); + } el.querySelectorAll('[data-od]').forEach(b => b.onclick = () => { state.od = b.dataset.od; render(); }); bindFindings(el); donut($('#dDir'), dirParts, 'dir'); @@ -1245,7 +1289,7 @@ views.ifaces = async (el) => { (d.ifaces || []).forEach(f => ifaceNames.set(f.exporter + '/' + f.ifindex, ifName(f) + ' · ' + (f.device || f.exporter))); const list = (d.ifaces || []).slice().sort((a, b) => (!!b.has_counters - !!a.has_counters) || ((devKind(b) === 'warn') - (devKind(a) === 'warn'))); if (!list.length) { el.innerHTML = `
${t('empty.nodata')}
`; return; } - if (!state.ifc || !list.some(f => f.exporter === state.ifc.exporter && f.ifindex === state.ifc.ifindex)) state.ifc = {exporter: list[0].exporter, ifindex: list[0].ifindex}; + if (!state.ifc || !list.some(f => f.exporter === state.ifc.exporter && f.ifindex === state.ifc.ifindex)) { const d = list.find(f => f.default) || list[0]; state.ifc = {exporter: d.exporter, ifindex: d.ifindex}; } const key = state.ifc.exporter + '/' + state.ifc.ifindex, sel = list.find(f => f.exporter === state.ifc.exporter && f.ifindex === state.ifc.ifindex); // one device's interface: count everything it saw, also traffic another device reported too const fil = [...state.f, {f: 'iface', v: key, neg: false}]; @@ -1256,12 +1300,14 @@ views.ifaces = async (el) => { const r = rc.recon || {}, ctr = !!r.has_counters; const leg = withCtr => `
${t('if.in')}${t('if.out')}${withCtr ? `${t('if.counter')}` : ''}
`; el.innerHTML = `
- ${panel('c6', `${esc(name)} · ${t('ch.bps')}`, '', `
${leg(ctr)}`)} - ${panel('c6', `${esc(name)} · ${t('ch.pps')}`, '', `
${leg(false)}`)}
+ ${panel('c12', `${esc(name)} · ${t('ch.bps')}`, '', `
${leg(ctr)}`)} + ${panel('c12', `${esc(name)} · ${t('ch.pps')}`, '', `
${leg(false)}`)}
${panel('c4', t('if.title'), t('if.sub'), `
${list.map(f => { - const k = devKind(f), cur = f.exporter === state.ifc.exporter && f.ifindex === state.ifc.ifindex; - return ``; + const k = devKind(f), cur = f.exporter === state.ifc.exporter && f.ifindex === state.ifc.ifindex, id = esc(f.exporter + '/' + f.ifindex); + return `
+
+ `; }).join('')}
`)}
`; // the device counters as dashed lines over the flow estimate: each counter @@ -1272,7 +1318,21 @@ views.ifaces = async (el) => { {name: t('if.out') + ' · ' + t('if.counter'), color: IF_OUT, dash: true, data: onTimes(ri.times, r.out_counter)}); tsChart($('#ifB'), {times: ri.times, lines: lb}); tsChart($('#ifP'), {times: pi.times, fmtY: fmtAxisBps, fmtV: fmtPps, lines: [{name: t('if.in'), color: IF_IN, data: pick(pi), fill: true}, {name: t('if.out'), color: IF_OUT, data: pick(po), fill: true}]}); - el.querySelectorAll('.iflist button').forEach(b => b.onclick = () => { state.ifc = {exporter: b.dataset.e, ifindex: +b.dataset.i}; render(); }); + el.querySelectorAll('.iflist button[data-e]').forEach(b => b.onclick = () => { state.ifc = {exporter: b.dataset.e, ifindex: +b.dataset.i}; render(); }); + // name, tag and default: written to the names (iface line) at once + const saveIf = async (id, body) => { + const [exporter, idx] = [id.slice(0, id.lastIndexOf('/')), +id.slice(id.lastIndexOf('/') + 1)]; + const res = await fetch('/api/iface', {method: 'POST', headers: {'Content-Type': 'application/json'}, body: JSON.stringify({exporter, ifindex: idx, ...body})}); + if (!res.ok) { const j = await res.json().catch(() => ({})); toast(j.error || res.statusText); return; } + ifList = null; render(); + }; + const ifOf = id => list.find(f => f.exporter + '/' + f.ifindex === id) || {}; + el.querySelectorAll('[data-star]').forEach(b => b.onclick = () => { const f = ifOf(b.dataset.star); saveIf(b.dataset.star, {name: f.name || '', tag: f.tag || '', default: !f.default}); }); + el.querySelectorAll('[data-edit]').forEach(b => b.onclick = () => { const fm = el.querySelector(`[data-form="${b.dataset.edit}"]`); fm.hidden = !fm.hidden; if (!fm.hidden) fm.name.focus(); }); + el.querySelectorAll('[data-form]').forEach(fm => { + fm.querySelector('[data-cancel]').onclick = () => { fm.hidden = true; }; + fm.onsubmit = e => { e.preventDefault(); const f = ifOf(fm.dataset.form); saveIf(fm.dataset.form, {name: fm.name.value, tag: fm.tag.value, default: !!f.default}); }; + }); const vin = ifVerdict(r, rc, true), vout = ifVerdict(r, rc, false); const head = v => ctr ? t('if.dev', {v: fmtPct(v.dev)}) : '—'; @@ -1554,6 +1614,8 @@ async function render(push) { document.title = t('nav.' + state.v) + ' · traffic66'; document.querySelectorAll('#nav button').forEach(b => b.dataset.v === state.v ? b.setAttribute('aria-current', 'page') : b.removeAttribute('aria-current')); renderRange(); + await renderIfsel(); + writeHash(false); document.querySelectorAll('.view').forEach(s => s.classList.toggle('on', s.id === 'v-' + state.v)); const el = $('#v-' + state.v), seq = ++loadSeq; try { @@ -1636,6 +1698,7 @@ async function init() { const lang = pickLang(); await loadLang(lang); $('#lang').value = lang; + $('#ifsel').onchange = () => { state.ifv = $('#ifsel').value; render(); }; $('#theme').onclick = () => { if (window.t66Theme) t66Theme.next(); themeLabel(); render(); }; $('#lang').onchange = async () => { await loadLang($('#lang').value); diff --git a/internal/web/static/i18n/ar.json b/internal/web/static/i18n/ar.json index 808091a..632be85 100644 --- a/internal/web/static/i18n/ar.json +++ b/internal/web/static/i18n/ar.json @@ -500,5 +500,14 @@ "ov.bw_out": "عرض النطاق الصادر، حسب التطبيق", "src.manual": "مضبوط يدويًا", "src.templates": "القوالب المستلمة (أرقام الحقول؛ s = النطاق):", -"src.stale": "متوقفة (الجهاز يرسل الآن بطريقة أخرى):" +"src.stale": "متوقفة (الجهاز يرسل الآن بطريقة أخرى):", +"if.picker": "الواجهة", +"if.all": "كل الواجهات", +"if.set_default": "اجعلها الافتراضية (تُفتح الصفحات عليها)", +"if.is_default": "الافتراضية: تُفتح الصفحات عليها", +"if.rename": "الاسم والوسم", +"if.name_ph": "اسم الواجهة", +"if.tag_ph": "وسم، مثل uplink", +"if.save": "حفظ", +"ov.if_sub": "الداخل والخارج عبر هذه الواجهة (اتجاه الواجهة)" } diff --git a/internal/web/static/i18n/bn.json b/internal/web/static/i18n/bn.json index 55bd2a6..3f18f42 100644 --- a/internal/web/static/i18n/bn.json +++ b/internal/web/static/i18n/bn.json @@ -500,5 +500,14 @@ "ov.bw_out": "বহির্গামী ব্যান্ডউইথ, অ্যাপ্লিকেশন অনুযায়ী", "src.manual": "হাতে ঠিক করা", "src.templates": "পাওয়া টেমপ্লেট (field id; s = scope):", -"src.stale": "বন্ধ (ডিভাইস এখন অন্যভাবে পাঠাচ্ছে):" +"src.stale": "বন্ধ (ডিভাইস এখন অন্যভাবে পাঠাচ্ছে):", +"if.picker": "ইন্টারফেস", +"if.all": "সব ইন্টারফেস", +"if.set_default": "ডিফল্ট করুন (পেজগুলো এটিতেই খোলে)", +"if.is_default": "ডিফল্ট: পেজগুলো এটিতেই খোলে", +"if.rename": "নাম ও ট্যাগ", +"if.name_ph": "ইন্টারফেসের নাম", +"if.tag_ph": "ট্যাগ, যেমন uplink", +"if.save": "সংরক্ষণ", +"ov.if_sub": "এই ইন্টারফেসে আসা / যাওয়া (ইন্টারফেসের দিক)" } diff --git a/internal/web/static/i18n/en.json b/internal/web/static/i18n/en.json index 959acaa..d9f072c 100644 --- a/internal/web/static/i18n/en.json +++ b/internal/web/static/i18n/en.json @@ -500,5 +500,14 @@ "ov.bw_out": "Outbound bandwidth, by application", "src.manual": "set by hand", "src.templates": "Templates received (field ids; s = scope):", -"src.stale": "Stopped (the device now sends otherwise):" +"src.stale": "Stopped (the device now sends otherwise):", +"if.picker": "Interface", +"if.all": "All interfaces", +"if.set_default": "Set as default (the pages open on it)", +"if.is_default": "The default: the pages open on it", +"if.rename": "Name and tag", +"if.name_ph": "Interface name", +"if.tag_ph": "Tag, e.g. uplink", +"if.save": "Save", +"ov.if_sub": "In and out as the interface sees it" } diff --git a/internal/web/static/i18n/es.json b/internal/web/static/i18n/es.json index 9afa843..1dafaf6 100644 --- a/internal/web/static/i18n/es.json +++ b/internal/web/static/i18n/es.json @@ -500,5 +500,14 @@ "ov.bw_out": "Ancho de banda saliente, por aplicación", "src.manual": "fijado a mano", "src.templates": "Plantillas recibidas (ids de campo; s = ámbito):", -"src.stale": "Detenidos (el equipo ahora envía de otra forma):" +"src.stale": "Detenidos (el equipo ahora envía de otra forma):", +"if.picker": "Interfaz", +"if.all": "Todas las interfaces", +"if.set_default": "Predeterminar (las páginas abren en ella)", +"if.is_default": "Predeterminada: las páginas abren en ella", +"if.rename": "Nombre y etiqueta", +"if.name_ph": "Nombre de la interfaz", +"if.tag_ph": "Etiqueta, p. ej. uplink", +"if.save": "Guardar", +"ov.if_sub": "Entrada y salida de esta interfaz (sentido de la interfaz)" } diff --git a/internal/web/static/i18n/fr.json b/internal/web/static/i18n/fr.json index 2d5d8c1..b937c75 100644 --- a/internal/web/static/i18n/fr.json +++ b/internal/web/static/i18n/fr.json @@ -500,5 +500,14 @@ "ov.bw_out": "Bande passante sortante, par application", "src.manual": "fixé à la main", "src.templates": "Modèles reçus (ids de champ ; s = portée) :", -"src.stale": "Arrêtés (l’équipement envoie désormais autrement) :" +"src.stale": "Arrêtés (l’équipement envoie désormais autrement) :", +"if.picker": "Interface", +"if.all": "Toutes les interfaces", +"if.set_default": "Définir par défaut (les pages s’ouvrent dessus)", +"if.is_default": "Par défaut : les pages s’ouvrent dessus", +"if.rename": "Nom et étiquette", +"if.name_ph": "Nom de l’interface", +"if.tag_ph": "Étiquette, ex. uplink", +"if.save": "Enregistrer", +"ov.if_sub": "Entrant et sortant de cette interface (sens de l’interface)" } diff --git a/internal/web/static/i18n/hi.json b/internal/web/static/i18n/hi.json index 6c577dd..2f52ef5 100644 --- a/internal/web/static/i18n/hi.json +++ b/internal/web/static/i18n/hi.json @@ -500,5 +500,14 @@ "ov.bw_out": "जाने वाली बैंडविड्थ, ऐप्लिकेशन के अनुसार", "src.manual": "हाथ से सेट", "src.templates": "मिले टेम्पलेट (field id; s = scope):", -"src.stale": "बंद (डिवाइस अब दूसरे तरीके से भेज रहा है):" +"src.stale": "बंद (डिवाइस अब दूसरे तरीके से भेज रहा है):", +"if.picker": "इंटरफ़ेस", +"if.all": "सभी इंटरफ़ेस", +"if.set_default": "डिफ़ॉल्ट बनाएँ (पेज इसी पर खुलते हैं)", +"if.is_default": "डिफ़ॉल्ट: पेज इसी पर खुलते हैं", +"if.rename": "नाम और टैग", +"if.name_ph": "इंटरफ़ेस का नाम", +"if.tag_ph": "टैग, जैसे uplink", +"if.save": "सहेजें", +"ov.if_sub": "इस इंटरफ़ेस में आना / जाना (इंटरफ़ेस की दिशा)" } diff --git a/internal/web/static/i18n/id.json b/internal/web/static/i18n/id.json index 86965f6..3133a84 100644 --- a/internal/web/static/i18n/id.json +++ b/internal/web/static/i18n/id.json @@ -500,5 +500,14 @@ "ov.bw_out": "Bandwidth keluar, per aplikasi", "src.manual": "diatur manual", "src.templates": "Template yang diterima (id field; s = scope):", -"src.stale": "Berhenti (perangkat kini mengirim dengan cara lain):" +"src.stale": "Berhenti (perangkat kini mengirim dengan cara lain):", +"if.picker": "Antarmuka", +"if.all": "Semua antarmuka", +"if.set_default": "Jadikan bawaan (halaman dibuka di sini)", +"if.is_default": "Bawaan: halaman dibuka di sini", +"if.rename": "Nama dan label", +"if.name_ph": "Nama antarmuka", +"if.tag_ph": "Label, mis. uplink", +"if.save": "Simpan", +"ov.if_sub": "Masuk dan keluar antarmuka ini (arah antarmuka)" } diff --git a/internal/web/static/i18n/ja.json b/internal/web/static/i18n/ja.json index 24c2c24..3fed214 100644 --- a/internal/web/static/i18n/ja.json +++ b/internal/web/static/i18n/ja.json @@ -500,5 +500,14 @@ "ov.bw_out": "送信帯域、アプリ別", "src.manual": "手動で指定", "src.templates": "受信したテンプレート(フィールド番号、s はスコープ):", -"src.stale": "停止(同じ機器が別の形式で送信中):" +"src.stale": "停止(同じ機器が別の形式で送信中):", +"if.picker": "インターフェース", +"if.all": "すべてのインターフェース", +"if.set_default": "デフォルトにする(各ページがこれを表示)", +"if.is_default": "デフォルト:各ページがこれを表示", +"if.rename": "名前とタグ", +"if.name_ph": "インターフェース名", +"if.tag_ph": "タグ(例:上流)", +"if.save": "保存", +"ov.if_sub": "インターフェースの向き:この口への入り / 出" } diff --git a/internal/web/static/i18n/ko.json b/internal/web/static/i18n/ko.json index a8c0a40..1244d3f 100644 --- a/internal/web/static/i18n/ko.json +++ b/internal/web/static/i18n/ko.json @@ -500,5 +500,14 @@ "ov.bw_out": "송신 대역폭, 애플리케이션별", "src.manual": "수동 지정", "src.templates": "받은 템플릿(필드 번호, s는 스코프):", -"src.stale": "중지됨(같은 장비가 지금은 다른 방식으로 보냄):" +"src.stale": "중지됨(같은 장비가 지금은 다른 방식으로 보냄):", +"if.picker": "인터페이스", +"if.all": "모든 인터페이스", +"if.set_default": "기본으로 설정(각 페이지가 이것을 표시)", +"if.is_default": "기본: 각 페이지가 이것을 표시", +"if.rename": "이름과 태그", +"if.name_ph": "인터페이스 이름", +"if.tag_ph": "태그(예: 업링크)", +"if.save": "저장", +"ov.if_sub": "인터페이스 방향: 이 포트로 들어옴 / 나감" } diff --git a/internal/web/static/i18n/pt.json b/internal/web/static/i18n/pt.json index 4f9950e..cc3f45f 100644 --- a/internal/web/static/i18n/pt.json +++ b/internal/web/static/i18n/pt.json @@ -500,5 +500,14 @@ "ov.bw_out": "Largura de banda de saída, por aplicação", "src.manual": "definido à mão", "src.templates": "Modelos recebidos (ids de campo; s = escopo):", -"src.stale": "Parados (o equipamento agora envia de outra forma):" +"src.stale": "Parados (o equipamento agora envia de outra forma):", +"if.picker": "Interface", +"if.all": "Todas as interfaces", +"if.set_default": "Definir como padrão (as páginas abrem nela)", +"if.is_default": "Padrão: as páginas abrem nela", +"if.rename": "Nome e rótulo", +"if.name_ph": "Nome da interface", +"if.tag_ph": "Rótulo, ex. uplink", +"if.save": "Salvar", +"ov.if_sub": "Entrada e saída desta interface (sentido da interface)" } diff --git a/internal/web/static/i18n/ru.json b/internal/web/static/i18n/ru.json index 3518596..6f562ee 100644 --- a/internal/web/static/i18n/ru.json +++ b/internal/web/static/i18n/ru.json @@ -500,5 +500,14 @@ "ov.bw_out": "Исходящая полоса, по приложениям", "src.manual": "задано вручную", "src.templates": "Полученные шаблоны (номера полей; s — область):", -"src.stale": "Остановлены (устройство теперь шлёт иначе):" +"src.stale": "Остановлены (устройство теперь шлёт иначе):", +"if.picker": "Интерфейс", +"if.all": "Все интерфейсы", +"if.set_default": "Сделать основным (страницы открываются на нём)", +"if.is_default": "Основной: страницы открываются на нём", +"if.rename": "Имя и метка", +"if.name_ph": "Имя интерфейса", +"if.tag_ph": "Метка, напр. аплинк", +"if.save": "Сохранить", +"ov.if_sub": "Вход и выход через этот интерфейс (направления интерфейса)" } diff --git a/internal/web/static/i18n/ur.json b/internal/web/static/i18n/ur.json index 760ab48..2b5ec02 100644 --- a/internal/web/static/i18n/ur.json +++ b/internal/web/static/i18n/ur.json @@ -500,5 +500,14 @@ "ov.bw_out": "جانے والی بینڈوڈتھ، ایپلیکیشن کے لحاظ سے", "src.manual": "ہاتھ سے مقرر", "src.templates": "موصول ٹیمپلیٹ (field id؛ s = scope):", -"src.stale": "بند (آلہ اب دوسرے طریقے سے بھیج رہا ہے):" +"src.stale": "بند (آلہ اب دوسرے طریقے سے بھیج رہا ہے):", +"if.picker": "انٹرفیس", +"if.all": "تمام انٹرفیس", +"if.set_default": "ڈیفالٹ بنائیں (صفحات اسی پر کھلیں)", +"if.is_default": "ڈیفالٹ: صفحات اسی پر کھلتے ہیں", +"if.rename": "نام اور ٹیگ", +"if.name_ph": "انٹرفیس کا نام", +"if.tag_ph": "ٹیگ، مثلاً uplink", +"if.save": "محفوظ کریں", +"ov.if_sub": "اس انٹرفیس میں آنا / جانا (انٹرفیس کی سمت)" } diff --git a/internal/web/static/i18n/zh.json b/internal/web/static/i18n/zh.json index 64de0d8..4529e18 100644 --- a/internal/web/static/i18n/zh.json +++ b/internal/web/static/i18n/zh.json @@ -500,5 +500,14 @@ "ov.bw_out": "出站带宽,按应用", "src.manual": "手动指定", "src.templates": "收到的模板(字段编号,s 表示作用域):", -"src.stale": "已停用(同一设备现在用别的方式在发):" +"src.stale": "已停用(同一设备现在用别的方式在发):", +"if.picker": "接口", +"if.all": "全部接口", +"if.set_default": "设为默认(各页面默认看它)", +"if.is_default": "默认接口:各页面默认看它", +"if.rename": "命名和标识", +"if.name_ph": "接口名称", +"if.tag_ph": "标识,如 上联", +"if.save": "保存", +"ov.if_sub": "按接口方向:从这个口进 / 出" } diff --git a/internal/web/static/index.html b/internal/web/static/index.html index 585f613..3e697d8 100644 --- a/internal/web/static/index.html +++ b/internal/web/static/index.html @@ -42,6 +42,7 @@

+