[-]
[+]
|
Changed |
_service:tar_git:nethogs.changes
|
|
[-]
[+]
|
Changed |
_service:tar_git:nethogs.spec
^
|
|
[-]
[+]
|
Changed |
_service
^
|
@@ -2,7 +2,7 @@
<service name="tar_git">
<param name="url">https://github.com/sailfishos-chum/nethogs</param>
<param name="branch"></param>
- <!-- param name="revision">0.8.7+obs2</param -->
+ <param name="revision">0.8.7+obs2</param>
<param name="token"/>
<param name="debian">N</param>
<param name="dumb">N</param>
|
[-]
[+]
|
Deleted |
_service:tar_git:nethogs-0.8.6+obs2.tar.gz/upstream/contrib/README.md
^
|
@@ -1,4 +0,0 @@
-This folder contains user-contributed scripts.
-
-The Nethogs project does not make claims about the quality of the scripts, maintains
-them in any way, or necessarily think they're a good idea in the first place :).
|
[-]
[+]
|
Changed |
_service:tar_git:nethogs-0.8.7+obs2.tar.gz/upstream/.gitignore
^
|
@@ -8,3 +8,5 @@
libnethogs.so.*
libnethogs.a
results/
+build/
+nethogs.egg-info
|
[-]
[+]
|
Changed |
_service:tar_git:nethogs-0.8.7+obs2.tar.gz/upstream/.travis.yml
^
|
@@ -10,3 +10,7 @@
os:
- linux
- osx
+
+arch:
+ - amd64
+ - ppc64le
|
[-]
[+]
|
Changed |
_service:tar_git:nethogs-0.8.7+obs2.tar.gz/upstream/README.md
^
|
@@ -8,6 +8,8 @@
NetHogs is a small 'net top' tool. Instead of breaking the traffic down per protocol or per subnet, like most tools do, **it groups bandwidth by process**.
+![screenshot](/doc/screenshot.png?raw=true)
+
NetHogs does not rely on a special kernel module to be loaded. If there's suddenly a lot of network traffic, you can fire up NetHogs and immediately see which PID is causing this. This makes it easy to identify programs that have gone wild and are suddenly taking up your bandwidth.
Since NetHogs heavily relies on `/proc`, most features are only available on Linux.
@@ -124,7 +126,14 @@
* [gnethogs](https://github.com/mbfoss/gnethogs) GTK-based GUI (work-in-progress)
* [nethogs-qt](http://slist.lilotux.net/linux/nethogs-qt/index_en.html) Qt-based GUI
* [hogwatch](https://github.com/akshayKMR/hogwatch) A bandwidth monitor(per process) with graphs for desktop/web.
-
+* [iptraf-ng](https://github.com/iptraf-ng/iptraf-ng) is a console-based network monitoring program for Linux that displays information about IP traffic.
+* [nettop (by Emanuele Oriani)](http://nettop.youlink.org/) is a simple process/network usage report for Linux.
+* [iptstate](https://www.phildev.net/iptstate/index.shtml) is a top-like interface to your netfilter connection-tracking table.
+* [flowtop](http://netsniff-ng.org/) is a top-like netfilter connection tracking tool.
+* [BusyTasks](https://www.pling.com/p/1201835) is a Java-based app using top, iotop and nethogs as backend.
+* [bandwhich](https://github.com/imsnif/bandwhich) is a terminal bandwidth utilization tool.
+* [sniffer](https://github.com/chenjiandongx/sniffer) is a modern alternative network traffic sniffer.
+
License
-------
|
[-]
[+]
|
Changed |
_service:tar_git:nethogs-0.8.7+obs2.tar.gz/upstream/determineVersion.sh
^
|
@@ -1,3 +1,3 @@
#!/bin/bash
-(git describe 2>/dev/null || pwd | sed -e "s/.*\\///" | sed -e "s/[^-]*//") | tail -c +2
+(git describe --tags 2>/dev/null || pwd | sed -e "s/.*\\///" | sed -e "s/[^-]*//") | tail -c +2
|
[-]
[+]
|
Changed |
_service:tar_git:nethogs-0.8.7+obs2.tar.gz/upstream/doc/nethogs.8
^
|
@@ -6,71 +6,99 @@
.SH SYNOPSIS
.ft B
.B nethogs
-.RB [ "\-h" ]
.RB [ "\-V" ]
-.RB [ "\-d" ]
-.RB [ "\-v" ]
+.RB [ "\-h" ]
+.RB [ "\-x" ]
+.RB [ "\-d seconds" ]
+.RB [ "\-v mode" ]
+.RB [ "\-c count" ]
.RB [ "\-t" ]
-.RB [ "\-c" ]
.RB [ "\-p" ]
-.RB [ "\-a" ]
.RB [ "\-s" ]
+.RB [ "\-a" ]
.RB [ "\-l" ]
+.RB [ "\-f filter" ]
+.RB [ "\-C" ]
+.RB [ "\-b" ]
+.RB [ "\-g period" ]
+.RB [ "\-P pid" ]
.RI [device(s)]
.SH DESCRIPTION
NetHogs is a small 'net top' tool. Instead of breaking the traffic down per protocol or per subnet, like most such tools do, it groups bandwidth by process - and does not rely on a special kernel module to be loaded. So if there's suddenly a lot of network traffic, you can fire up NetHogs and immediately see which PID is causing this, and if it's some kind of spinning process, kill it.
.SS Options
.TP
+\fB-V\fP
+prints version.
+.TP
\fB-h\fP
-display available commands usage
+prints available commands usage.
.TP
-\fB-V\fP
-print version info
+\fB-x\fP
+bughunt mode - implies tracemode.
.TP
\fB-d\fP
-delay for refresh rate
+delay for update refresh rate in seconds. default is 1.
.TP
\fB-v\fP
-select view mode
-.TP
-\fB-p\fP
-sniff in promiscuous mode (not recommended)
+view mode (0 = KB/s, 1 = total KB, 2 = total B, 3 = total MB, 4 = MB/s, 5 = GB/s). default is 0.
.TP
-\fB-a\fP
-monitor all devices, even loopback/stopped ones
+\fB-c\fP
+number of updates. default is 0 (unlimited).
.TP
\fB-t\fP
-tracemode
+tracemode.
.TP
-\fB-c\fP
-limit number of refreshes
+\fB-p\fP
+sniff in promiscuous mode (not recommended).
.TP
\fB-s\fP
-sort by traffic sent
+sort output by sent column.
.TP
\fB-l\fP
-display command line
+display command line.
+.TP
+\fB-a\fP
+monitor all devices, even loopback/stopped ones.
+.TP
+\fB-C\fP
+capture TCP and UDP.
+.TP
+\fB-b\fP
+Display the program basename.
+.TP
+\fB-g\fP
+garbage collection period in number of refresh. default is 50.
+.TP
+\fB-P\fP
+Show only processes with the specified pid(s).
+.TP
+\fB-f\fP
+EXPERIMENTAL: specify string pcap filter (like tcpdump). This may be removed or changed in a future version.
+.TP
.PP
.I device(s)
-to monitor. By default eth0 is being used
+to monitor. default is all interfaces up and running excluding loopback
.SH "INTERACTIVE CONTROL"
.TP
-m
-cycle between display modes (KB/s, KB, B, MB, MB/s, GB/s)
+q
+quit
.TP
-l
-display command line
+s
+sort by SENT traffic
.TP
r
-sort by 'received'
+sort by RECEIVED traffic
.TP
-s
-sort by 'sent'
+l
+display command line
.TP
-q
-quit
+b
+display the program basename
+.TP
+m
+switch between total (KB, B, MB) and throughput (KB/s, MB/s, GB/s) mode
.RE
.SH "RUNNING WITHOUT ROOT"
@@ -89,7 +117,9 @@
sudo setcap "cap_net_admin,cap_net_raw+pe" /usr/local/sbin/nethogs
.EE
.in
-
+.SH "Notes"
+1. When using the -P <pid> option, in a case where a process exited (normally or abruptly), Nethogs does not track that it exited. So, the operating system might create
+a new process (for another program) with the same pid. In this case, this new process will be shown by Nethogs.
.SH "SEE ALSO"
.I netstat(8) tcpdump(1) pcap(3)
.SH AUTHOR
|
|
Added |
_service:tar_git:nethogs-0.8.7+obs2.tar.gz/upstream/doc/screenshot.png
^
|
[-]
[+]
|
Added |
_service:tar_git:nethogs-0.8.7+obs2.tar.gz/upstream/pyproject.toml
^
|
@@ -0,0 +1,8 @@
+[build-system]
+requires = [
+ "setuptools>=42",
+ "wheel",
+ "pybind11>=2.8.0",
+]
+
+build-backend = "setuptools.build_meta"
|
[-]
[+]
|
Added |
_service:tar_git:nethogs-0.8.7+obs2.tar.gz/upstream/python/README.md
^
|
@@ -0,0 +1,49 @@
+## Python stuff
+This directory contains the code that wraps `libnethogs` into a python module.
+
+### To build + install
+Install dependencies:
+``` bash
+apt-get install build-essential libncurses5-dev libpcap-dev pybind11-dev
+```
+All the code is compiled through the [pybind11 setuptools building system](https://pybind11.readthedocs.io/en/stable/compiling.html). So to build and install you just need to do:
+``` bash
+### if you have the code cloned locally
+pip install .
+```
+Or:
+``` bash
+### if you can't bother to clone the repo yourself
+pip install git+https://github.com/raboof/nethogs.git
+```
+
+### To use
+``` python
+import nethogs
+import threading
+
+def callback(action: int, record: nethogs.NethogsMonitorRecord) -> None:
+ do_whatever_with_record(record)
+ return
+
+th = threading.Thread(target=nethogs.nethogsmonitor_loop, args(callback, filter, to_ms))
+th.start()
+do_whatever_you_need_to_do()
+nethogs.nethogsmonitor_breakloop()
+th.join()
+```
+
+### Caveats
+- **Ideally this should not be run in the main thread**, stopping the nethogsmonitor_loop with a SIGINT or SIGTERM is a bit hacky and could break things.
+- Only one instance of the loop can be run at a time, callbacks would get completely messed up if more than one is run. I believe nethogs only allows one at a time anyways.
+- There is no way of setting pidsToWatch, but it is not difficult to implement if anyone wants to do it :)
+- The package version is set in setup.py using the script determineVersion.sh, but it is very hacky as a PEP compatible string is needed. Something stronger should be implemented, ideally using the regex module.
+
+## Extra stuff
+The script `python-wrapper.py` used to be in a contrib directory. This script loads the libnethogs library directly, which you shouldn't really do anyways. The way of using nethogs in python by the `python-wrapper.py` is now deprecated. I'm just leaving it here to not destroy the previous contribution. This is the original comment that **raboof** made about the `python-wrapper.py` and the `contrib` directory:
+```
+This folder contains user-contributed scripts.
+
+The Nethogs project does not make claims about the quality of the scripts, maintains
+them in any way, or necessarily think they're a good idea in the first place :).
+```
|
[-]
[+]
|
Added |
_service:tar_git:nethogs-0.8.7+obs2.tar.gz/upstream/python/bindings.cpp
^
|
@@ -0,0 +1,98 @@
+#include <pybind11/functional.h>
+#include <pybind11/pybind11.h>
+#include <pybind11/stl.h>
+#include <set>
+#include <iostream>
+
+#include "libnethogs.h"
+
+namespace py = pybind11;
+
+//--- for some reason this is a global defined in main.cpp
+std::set<pid_t> pidsToWatch;
+
+//--- hacky way to get callbacks working and handle signals
+std::function<void(int, NethogsMonitorRecord const *)> empty_callback;
+std::function<void(int, NethogsMonitorRecord const *)> loop_callback;
+void loop_callback_wrapper(
+ int action,
+ NethogsMonitorRecord const *record)
+{
+ py::gil_scoped_acquire acquire;
+ if (PyErr_CheckSignals() != 0) {
+ nethogsmonitor_breakloop();
+ PyErr_Clear();
+ }
+ else if (loop_callback) {
+ loop_callback(action, record);
+ }
+}
+
+int nethogsmonitor_loop_py(
+ std::function<void(int, NethogsMonitorRecord const *)> &cb,
+ char *filter,
+ int to_ms)
+{
+ int retval;
+ loop_callback = cb;
+ {
+ py::gil_scoped_release release;
+ retval = nethogsmonitor_loop(loop_callback_wrapper, filter, to_ms);
+ }
+ loop_callback = empty_callback;
+ return retval;
+}
+
+int nethogsmonitor_loop_devices_py(
+ std::function<void(int, NethogsMonitorRecord const *)> &cb,
+ char *filter,
+ std::vector<std::string> __devicenames,
+ bool all,
+ int to_ms)
+{
+ // this is ok because we only use the vector here
+ std::vector<char*> _devicenames;
+ for (auto _dn : __devicenames) _devicenames.push_back(const_cast<char*>(_dn.c_str()));
+ int devc = _devicenames.size();
+ char **devicenames = (_devicenames.empty()) ? NULL : _devicenames.data();
+
+ int retval;
+ loop_callback = cb;
+ {
+ py::gil_scoped_release release;
+ retval = nethogsmonitor_loop_devices(loop_callback_wrapper, filter, devc, devicenames, all, to_ms);
+ }
+ loop_callback = empty_callback;
+ return retval;
+}
+
+//--- python module binding
+PYBIND11_MODULE(nethogs, m) {
+ py::class_<NethogsMonitorRecord>(m, "NethogsMonitorRecord")
+ .def_readwrite("record_id", &NethogsMonitorRecord::record_id)
+ .def_readwrite("name", &NethogsMonitorRecord::name)
+ .def_readwrite("pid", &NethogsMonitorRecord::pid)
+ .def_readwrite("uid", &NethogsMonitorRecord::uid)
+ .def_readwrite("device_name", &NethogsMonitorRecord::device_name)
+ .def_readwrite("sent_bytes", &NethogsMonitorRecord::sent_bytes)
+ .def_readwrite("recv_bytes", &NethogsMonitorRecord::recv_bytes)
+ .def_readwrite("sent_kbs", &NethogsMonitorRecord::sent_kbs)
+ .def_readwrite("recv_kbs", &NethogsMonitorRecord::recv_kbs);
+
+ m.def("nethogsmonitor_loop", &nethogsmonitor_loop_py, R"pbdoc(
+ Nethogs monitor loop
+ )pbdoc");
+ m.def("nethogsmonitor_loop_devices", &nethogsmonitor_loop_devices_py, R"pbdoc(
+ Nethogs monitor loop
+ )pbdoc");
+ m.def("nethogsmonitor_breakloop", &nethogsmonitor_breakloop, R"pbdoc(
+ Nethogs monitor loop break
+ )pbdoc");
+
+#ifdef VERSION
+ m.attr("__version__") = VERSION;
+#else
+ m.attr("__version__") = "unknown";
+#endif
+
+}
|
[-]
[+]
|
Changed |
_service:tar_git:nethogs-0.8.7+obs2.tar.gz/upstream/python/python-wrapper.py
^
|
(renamed from upstream/contrib/python-wrapper.py)
|
[-]
[+]
|
Added |
_service:tar_git:nethogs-0.8.7+obs2.tar.gz/upstream/setup.py
^
|
@@ -0,0 +1,63 @@
+import glob
+import subprocess
+import sys
+
+from pybind11 import get_cmake_dir
+# Available at setup time due to pyproject.toml
+from pybind11.setup_helpers import Pybind11Extension, build_ext
+from setuptools import setup
+
+_version_info = subprocess.run(['bash', "./determineVersion.sh"], stdout=subprocess.PIPE)
+__version__ = _version_info.stdout.decode("utf-8").rstrip("\n").split("-")[0] if _version_info else "0.0.0"
+
+OBJS = [
+ "python/bindings.cpp",
+ "src/libnethogs.cpp",
+ "src/packet.cpp",
+ "src/connection.cpp",
+ "src/process.cpp",
+ "src/decpcap.c",
+ "src/inode2prog.cpp",
+ "src/conninode.cpp",
+ "src/devices.cpp"
+]
+
+FLAGS = [
+ "-Wall",
+ "-Wextra",
+ "-Wno-missing-field-initializers",
+ "--std=c++0x",
+ "-O3",
+ "-fPIC",
+ '-DVERSION="{}"'.format(__version__)
+]
+# The main interface is through Pybind11Extension.
+# * You can add cxx_std=11/14/17, and then build_ext can be removed.
+# * You can set include_pybind11=false to add the include directory yourself,
+# say from a submodule.
+#
+# Note:
+# Sort input source files if you glob sources to ensure bit-for-bit
+# reproducible builds (https://github.com/pybind/python_example/pull/53)
+
+ext_modules = [
+ Pybind11Extension(
+ "nethogs",
+ sources = OBJS,
+ include_dirs = ["src/"],
+ extra_compile_args = FLAGS,
+ libraries = ["pcap"]
+ ),
+]
+
+setup(
+ name="nethogs",
+ version=__version__,
+ author="raboof",
+ url="https://github.com/raboof/nethogs",
+ description="Nethogs python bindings",
+ ext_modules=ext_modules,
+ cmdclass={"build_ext": build_ext},
+ zip_safe=False,
+ python_requires=">=3.6",
+)
|
[-]
[+]
|
Changed |
_service:tar_git:nethogs-0.8.7+obs2.tar.gz/upstream/src/connection.cpp
^
|
@@ -33,7 +33,7 @@
#include "nethogs.h"
#include "process.h"
-ConnList *connections = NULL;
+ConnList connections;
extern Process *unknownudp;
void PackList::add(Packet *p) {
@@ -78,7 +78,6 @@
/* packet may be deleted by caller */
Connection::Connection(Packet *packet) {
assert(packet != NULL);
- connections = new ConnList(this, connections);
sent_packets = new PackList();
recv_packets = new PackList();
sumSent = 0;
@@ -96,6 +95,7 @@
recv_packets->add(packet);
refpacket = packet->newInverted();
}
+ connections.insert(this);
lastpacket = packet->time.tv_sec;
if (DEBUG)
std::cout << "New reference packet created at " << refpacket << std::endl;
@@ -104,6 +104,13 @@
Connection::~Connection() {
if (DEBUG)
std::cout << "Deleting connection" << std::endl;
+ auto r = connections.equal_range(this);
+ for (auto it = r.first; it != r.second; ++it) {
+ if (*it == this) {
+ connections.erase(it);
+ break;
+ }
+ }
/* refpacket is not a pointer to one of the packets in the lists
* so deleted */
delete (refpacket);
@@ -111,24 +118,6 @@
delete sent_packets;
if (recv_packets != NULL)
delete recv_packets;
-
- ConnList *curr_conn = connections;
- ConnList *prev_conn = NULL;
- while (curr_conn != NULL) {
- if (curr_conn->getVal() == this) {
- ConnList *todelete = curr_conn;
- curr_conn = curr_conn->getNext();
- if (prev_conn == NULL) {
- connections = curr_conn;
- } else {
- prev_conn->setNext(curr_conn);
- }
- delete (todelete);
- } else {
- prev_conn = curr_conn;
- curr_conn = curr_conn->getNext();
- }
- }
}
/* the packet will be freed by the calling code */
@@ -156,26 +145,24 @@
short int packettype) {
assert(packet->Outgoing());
- ConnList *current = NULL;
+ ConnList *connList = NULL;
switch (packettype) {
case IPPROTO_TCP: {
- current = connections;
+ connList = &connections;
break;
}
case IPPROTO_UDP: {
- current = unknownudp->connections;
+ connList = &unknownudp->connections;
break;
}
}
- while (current != NULL) {
- /* the reference packet is always outgoing */
- if (packet->matchSource(current->getVal()->refpacket)) {
- return current->getVal();
- }
-
- current = current->getNext();
+ Packet p = packet->onlySource();
+ auto it = connList->lower_bound(&p);
+ /* the reference packet is always outgoing */
+ if (it != connList->end() && packet->matchSource((*it)->refpacket)) {
+ return *it;
}
return NULL;
@@ -184,25 +171,23 @@
Connection *findConnectionWithMatchingRefpacketOrSource(Packet *packet,
short int packettype) {
- ConnList *current = NULL;
+ ConnList *connList = NULL;
switch (packettype) {
case IPPROTO_TCP: {
- current = connections;
+ connList = &connections;
break;
}
case IPPROTO_UDP: {
- current = unknownudp->connections;
+ connList = &unknownudp->connections;
break;
}
}
- while (current != NULL) {
- /* the reference packet is always *outgoing* */
- if (packet->match(current->getVal()->refpacket)) {
- return current->getVal();
- }
- current = current->getNext();
+ auto it = connList->lower_bound(packet);
+ /* the reference packet is always *outgoing* */
+ if (it != connList->end() && packet->match((*it)->refpacket)) {
+ return *it;
}
return findConnectionWithMatchingSource(packet, packettype);
|
[-]
[+]
|
Changed |
_service:tar_git:nethogs-0.8.7+obs2.tar.gz/upstream/src/conninode.cpp
^
|
@@ -36,12 +36,14 @@
extern local_addr *local_addrs;
extern bool bughuntmode;
+extern bool catchall;
/*
* connection-inode table. takes information from /proc/net/tcp.
* key contains source ip, source port, destination ip, destination
* port in format: '1.2.3.4:5-1.2.3.4:5'
*/
-std::map<std::string, unsigned long> conninode;
+std::map<std::string, unsigned long> conninode_tcp;
+std::map<std::string, unsigned long> conninode_udp;
/*
* parses a /proc/net/tcp-line of the form:
@@ -58,7 +60,8 @@
*00000000 0 0 2525 2 c732eca0 201 40 1 2 -1
*
*/
-void addtoconninode(char *buffer) {
+void addtoconninode(char *buffer,
+ std::map<std::string, unsigned long> &conninode) {
short int sa_family;
struct in6_addr result_addr_local = {};
struct in6_addr result_addr_remote = {};
@@ -159,7 +162,8 @@
}
/* opens /proc/net/tcp[6] and adds its contents line by line */
-int addprocinfo(const char *filename) {
+int addprocinfo(const char *filename,
+ std::map<std::string, unsigned long> &conninode) {
FILE *procinfo = fopen(filename, "r");
char buffer[8192];
@@ -171,7 +175,7 @@
do {
if (fgets(buffer, sizeof(buffer), procinfo))
- addtoconninode(buffer);
+ addtoconninode(buffer, conninode);
} while (!feof(procinfo));
fclose(procinfo);
@@ -185,15 +189,27 @@
// conninode = new HashTable (256);
#if defined(__APPLE__) || defined(__FreeBSD__)
- addprocinfo("net.inet.tcp.pcblist");
+ addprocinfo("net.inet.tcp.pcblist", conninode_tcp);
#else
- if (!addprocinfo("/proc/net/tcp")) {
+ if (!addprocinfo("/proc/net/tcp", conninode_tcp)) {
std::cout << "Error: couldn't open /proc/net/tcp\n";
exit(0);
}
- addprocinfo("/proc/net/tcp6");
+ addprocinfo("/proc/net/tcp6", conninode_tcp);
#endif
+ if (catchall) {
+#if defined(__APPLE__) || defined(__FreeBSD__)
+ addprocinfo("net.inet.udp.pcblist", conninode_udp);
+#else
+ if (!addprocinfo("/proc/net/udp", conninode_udp)) {
+ std::cout << "Error: couldn't open /proc/net/udp\n";
+ exit(0);
+ }
+ addprocinfo("/proc/net/udp6", conninode_udp);
+#endif
+ }
+
// if (DEBUG)
// reviewUnknown();
}
|
[-]
[+]
|
Changed |
_service:tar_git:nethogs-0.8.7+obs2.tar.gz/upstream/src/conninode_test.cpp
^
|
@@ -2,23 +2,40 @@
local_addr *local_addrs = NULL;
bool bughuntmode = false;
+bool catchall = false;
int main() {
- if (!addprocinfo("testfiles/proc_net_tcp")) {
+ if (!addprocinfo("testfiles/proc_net_tcp", conninode_tcp)) {
std::cerr << "Failed to load testfiles/proc_net_tcp" << std::endl;
return 1;
}
- if (!addprocinfo("testfiles/proc_net_tcp_big")) {
+ if (!addprocinfo("testfiles/proc_net_tcp_big", conninode_tcp)) {
std::cerr << "Failed to load testfiles/proc_net_tcp_big" << std::endl;
return 2;
}
#if !defined(__APPLE__) && !defined(__FreeBSD__)
- if (!addprocinfo("/proc/net/tcp")) {
+ if (!addprocinfo("/proc/net/tcp", conninode_tcp)) {
std::cerr << "Failed to load /proc/net/tcp" << std::endl;
return 3;
}
#endif
+ if (!addprocinfo("testfiles/proc_net_udp", conninode_udp)) {
+ std::cerr << "Failed to load testfiles/proc_net_udp" << std::endl;
+ return 4;
+ }
+ if (!addprocinfo("testfiles/proc_net_udp_big", conninode_udp)) {
+ std::cerr << "Failed to load testfiles/proc_net_udp_big" << std::endl;
+ return 5;
+ }
+
+#if !defined(__APPLE__) && !defined(__FreeBSD__)
+ if (!addprocinfo("/proc/net/udp", conninode_udp)) {
+ std::cerr << "Failed to load /proc/net/udp" << std::endl;
+ return 6;
+ }
+#endif
+
return 0;
}
|
[-]
[+]
|
Changed |
_service:tar_git:nethogs-0.8.7+obs2.tar.gz/upstream/src/cui.cpp
^
|
@@ -26,6 +26,7 @@
#include <cstdlib>
#include <pwd.h>
#include <string>
+#include <strings.h>
#include <sys/types.h>
#include "nethogs.h"
@@ -45,6 +46,7 @@
extern int viewMode;
extern bool showcommandline;
+extern bool showBasename;
extern unsigned refreshlimit;
extern unsigned refreshcount;
@@ -67,6 +69,8 @@
const char *const desc_view_mode[VIEWMODE_COUNT] = {
"KB/sec", "KB ", "B ", "MB ", "MB/sec", "GB/sec"};
+constexpr char FILE_SEPARATOR = '/';
+
class Line {
public:
Line(const char *name, const char *cmdline, double n_recv_value,
@@ -152,6 +156,12 @@
static void mvaddstr_truncate_cmdline(int row, int col, const char *progname,
const char *cmdline,
std::size_t max_len) {
+ if (showBasename) {
+ if (index(progname, FILE_SEPARATOR) != NULL) {
+ progname = rindex(progname, FILE_SEPARATOR) + 1;
+ }
+ }
+
std::size_t proglen = strlen(progname);
std::size_t max_cmdlen;
@@ -305,6 +315,10 @@
/* switch mode: total vs kb/s */
viewMode = (viewMode + 1) % VIEWMODE_COUNT;
break;
+ case 'b':
+ /* show only the process basename */
+ showBasename = !showBasename;
+ break;
}
}
@@ -318,13 +332,10 @@
}
/* print the 'unknown' connections, for debugging */
- ConnList *curr_unknownconn = unknowntcp->connections;
- while (curr_unknownconn != NULL) {
+ for (auto it = unknowntcp->connections.begin(); it != unknowntcp->connections.end(); ++it) {
std::cout << "Unknown connection: "
- << curr_unknownconn->getVal()->refpacket->gethashstring()
+ << (*it)->refpacket->gethashstring()
<< std::endl;
-
- curr_unknownconn = curr_unknownconn->getNext();
}
}
@@ -374,9 +385,9 @@
int totalrow = std::min(rows - 1, 3 + 1 + i);
mvprintw(totalrow, 0, " TOTAL %-*.*s %-*.*s %11.3f %11.3f ",
proglen, proglen, "", devlen, devlen, "", sent_global, recv_global);
- mvprintw(3 + 1 + i, cols - COLUMN_WIDTH_UNIT, desc_view_mode[viewMode]);
+ mvprintw(3 + 1 + i, cols - COLUMN_WIDTH_UNIT, "%s", desc_view_mode[viewMode]);
attroff(A_REVERSE);
- mvprintw(totalrow + 1, 0, "");
+ mvprintw(totalrow + 1, 0, "%s", "");
refresh();
}
|
[-]
[+]
|
Changed |
_service:tar_git:nethogs-0.8.7+obs2.tar.gz/upstream/src/inode2prog.cpp
^
|
@@ -20,6 +20,7 @@
*
*/
+#include <algorithm>
#include <cerrno>
#include <climits>
#include <cstdio>
@@ -30,6 +31,7 @@
#include <fcntl.h>
#include <iostream>
#include <map>
+#include <set>
#include <sstream>
#include <string>
#include <sys/stat.h>
@@ -224,6 +226,73 @@
closedir(dir);
}
+static quad_t get_ms() {
+ struct timespec ts;
+ clock_gettime(CLOCK_MONOTONIC, &ts);
+ return static_cast<quad_t>(ts.tv_sec) * 1000 + ts.tv_nsec / 1000000;
+}
+
+static void get_pids(std::set<pid_t> *pids) {
+ DIR *proc = opendir("/proc");
+ if (proc == 0) {
+ std::cerr << "Error reading /proc, needed to get pid set" << std::endl;
+ exit(1);
+ }
+ dirent *entry;
+
+ while ((entry = readdir(proc))) {
+ if (entry->d_type != DT_DIR)
+ continue;
+
+ if (!is_number(entry->d_name))
+ continue;
+
+ pids->insert(str2int(entry->d_name));
+ }
+ closedir(proc);
+}
+
+void garbage_collect_inodeproc() {
+ static quad_t last_ms = 0;
+ quad_t start_ms = 0;
+ if (bughuntmode) {
+ start_ms = get_ms();
+ if (last_ms) {
+ std::cout << "PERF: GC interval: " << start_ms - last_ms << "[ms]"
+ << std::endl;
+ }
+ }
+
+ std::set<pid_t> pids;
+ get_pids(&pids);
+ if (pids.size() == 0) {
+ return;
+ }
+
+ for (std::map<unsigned long, prg_node *>::iterator it = inodeproc.begin();
+ it != inodeproc.end();) {
+ if (!it->second || pids.find(it->second->pid) != pids.end()) {
+ ++it;
+ continue;
+ }
+
+ if (bughuntmode) {
+ std::cout << "GC prg_node (inode=" << it->first
+ << ", pid=" << it->second->pid
+ << ", cmdline=" << it->second->cmdline.c_str() << ")"
+ << std::endl;
+ }
+ delete it->second;
+ inodeproc.erase(it++);
+ }
+
+ if (bughuntmode) {
+ last_ms = get_ms();
+ std::cout << "PERF: GC proctime: " << last_ms - start_ms << "[ms]"
+ << std::endl;
+ }
+}
+
/* updates the `inodeproc' inode-to-prg_node mapping
* for all processes in /proc */
void reread_mapping() {
|
[-]
[+]
|
Changed |
_service:tar_git:nethogs-0.8.7+obs2.tar.gz/upstream/src/inode2prog.h
^
|
@@ -41,4 +41,6 @@
// reread the inode-to-prg_node-mapping
void reread_mapping();
+void garbage_collect_inodeproc();
+
#endif
|
[-]
[+]
|
Changed |
_service:tar_git:nethogs-0.8.7+obs2.tar.gz/upstream/src/main.cpp
^
|
@@ -1,5 +1,6 @@
#include "nethogs.cpp"
#include <fcntl.h>
+#include <set>
#include <vector>
#ifdef __linux__
@@ -14,6 +15,8 @@
static std::pair<int, int> self_pipe = std::make_pair(-1, -1);
static time_t last_refresh_time = 0;
+std::set<pid_t> pidsToWatch;
+
// selectable file descriptors for the main loop
static fd_set pc_loop_fd_set;
static std::vector<int> pc_loop_fd_list;
@@ -26,12 +29,12 @@
// output << "usage: nethogs [-V] [-b] [-d seconds] [-t] [-p] [-f (eth|ppp))]
// [device [device [device ...]]]\n";
- output << "usage: nethogs [-V] [-h] [-b] [-d seconds] [-v mode] [-c count] "
- "[-t] [-p] [-s] [-a] [-l] [-f filter] [-C]"
+ output << "usage: nethogs [-V] [-h] [-x] [-d seconds] [-v mode] [-c count] "
+ "[-t] [-p] [-s] [-a] [-l] [-f filter] [-C] [-b] [-P pid] "
"[device [device [device ...]]]\n";
output << " -V : prints version.\n";
output << " -h : prints this help.\n";
- output << " -b : bughunt mode - implies tracemode.\n";
+ output << " -x : bughunt mode - implies tracemode.\n";
output << " -d : delay for update refresh rate in seconds. default "
"is 1.\n";
output << " -v : view mode (0 = KB/s, 1 = total KB, 2 = total B, 3 "
@@ -46,17 +49,22 @@
output << " -a : monitor all devices, even loopback/stopped "
"ones.\n";
output << " -C : capture TCP and UDP.\n";
+ output << " -g : garbage collection period in number of refresh. "
+ "default is 50.\n";
+ output << " -b : Short program name. Displays only the program name.\n";
output << " -f : EXPERIMENTAL: specify string pcap filter (like "
"tcpdump)."
" This may be removed or changed in a future version.\n";
output << " device : device(s) to monitor. default is all "
"interfaces up and running excluding loopback\n";
+ output << " -P : Show only processes.\n";
output << std::endl;
output << "When nethogs is running, press:\n";
output << " q: quit\n";
output << " s: sort by SENT traffic\n";
- output << " r: sort by RECEIVE traffic\n";
+ output << " r: sort by RECEIVED traffic\n";
output << " l: display command line\n";
+ output << " b: display the program basename instead of the fullpath\n";
output << " m: switch between total (KB, B, MB) and throughput (KB/s, MB/s, "
"GB/s) mode\n";
}
@@ -140,9 +148,11 @@
int promisc = 0;
bool all = false;
char *filter = NULL;
+ int garbage_collection_period = 50;
+
int opt;
- while ((opt = getopt(argc, argv, "Vhbtpsd:v:c:laf:C")) != -1) {
+ while ((opt = getopt(argc, argv, "Vhxtpsd:v:c:laf:Cbg:P:")) != -1) {
switch (opt) {
case 'V':
versiondisplay();
@@ -150,7 +160,7 @@
case 'h':
help(false);
exit(0);
- case 'b':
+ case 'x':
bughuntmode = true;
tracemode = true;
break;
@@ -184,6 +194,15 @@
case 'C':
catchall = true;
break;
+ case 'b':
+ showBasename = true;
+ break;
+ case 'g':
+ garbage_collection_period = (time_t)atoi(optarg);
+ break;
+ case 'P':
+ pidsToWatch.insert((pid_t) atoi(optarg));
+ break;
default:
help(true);
exit(EXIT_FAILURE);
@@ -200,27 +219,11 @@
init_ui();
}
- if (geteuid() != 0) {
-#ifdef __linux__
- char exe_path[PATH_MAX];
- ssize_t len;
- unsigned int caps[5] = {0, 0, 0, 0, 0};
-
- if ((len = readlink("/proc/self/exe", exe_path, PATH_MAX)) == -1)
- forceExit(false, "Failed to locate nethogs binary.");
- exe_path[len] = '\0';
-
- getxattr(exe_path, "security.capability", (char *)caps, sizeof(caps));
-
- if ((((caps[1] >> CAP_NET_ADMIN) & 1) != 1) ||
- (((caps[1] >> CAP_NET_RAW) & 1) != 1))
- forceExit(false, "To run nethogs without being root you need to enable "
- "capabilities on the program (cap_net_admin, "
- "cap_net_raw), see the documentation for details.");
-#else
+#ifndef __linux__
+ if (geteuid() != 0)
forceExit(false, "You need to be root to run NetHogs!");
#endif
- }
+ // on Linux, we can run as non-root given the cap_net_admin and cap_net_raw capabilities
// use the Self-Pipe trick to interrupt the select() in the main loop
self_pipe = create_self_pipe();
@@ -286,6 +289,10 @@
}
if (nb_devices == nb_failed_devices) {
+ if (geteuid() != 0)
+ fprintf(stderr, "To run nethogs without being root, you need to enable "
+ "capabilities on the program (cap_net_admin, cap_new_raw). "
+ "See the documentation for details.\n");
forceExit(false, "Error opening pcap handlers for all devices.\n");
}
@@ -294,6 +301,7 @@
struct dpargs *userdata = (dpargs *)malloc(sizeof(struct dpargs));
// Main loop:
+ int refresh_count = 0;
while (1) {
bool packets_read = false;
@@ -322,6 +330,12 @@
ui_tick();
}
do_refresh();
+ ++refresh_count;
+
+ if ((garbage_collection_period > 0) &&
+ (refresh_count % garbage_collection_period == 0)) {
+ garbage_collect_processes();
+ }
}
// if not packets, do a select() until next packet
|
[-]
[+]
|
Changed |
_service:tar_git:nethogs-0.8.7+obs2.tar.gz/upstream/src/nethogs.cpp
^
|
@@ -60,6 +60,7 @@
// sort on sent or received?
bool sortRecv = true;
bool showcommandline = false;
+bool showBasename = false;
// viewMode: kb/s or total
int viewMode = VIEWMODE_KBPS;
const char version[] = " version " VERSION;
@@ -150,7 +151,7 @@
} else {
/* else: unknown connection, create new */
connection = new Connection(packet);
- getProcess(connection, args->device);
+ getProcess(connection, args->device, IPPROTO_TCP);
}
delete packet;
@@ -202,8 +203,7 @@
} else {
/* else: unknown connection, create new */
connection = new Connection(packet);
- unknownudp->connections = new ConnList(connection, unknownudp->connections);
- // getProcess(connection, args->device);
+ getProcess(connection, args->device, IPPROTO_UDP);
}
delete packet;
|
[-]
[+]
|
Changed |
_service:tar_git:nethogs-0.8.7+obs2.tar.gz/upstream/src/packet.cpp
^
|
@@ -289,7 +289,7 @@
/* 2 packets match if they have the same
* source and destination ports and IP's. */
-bool Packet::match(Packet *other) {
+bool Packet::match(const Packet *other) const {
return sa_family == other->sa_family && (sport == other->sport) &&
(dport == other->dport) &&
(sa_family == AF_INET
@@ -298,6 +298,46 @@
(samein6addr(dip6, other->dip6)));
}
-bool Packet::matchSource(Packet *other) {
- return (sport == other->sport) && (sameinaddr(sip, other->sip));
+bool Packet::matchSource(const Packet *other) const {
+ return sa_family == other->sa_family && (sport == other->sport) &&
+ (sa_family == AF_INET
+ ? (sameinaddr(sip, other->sip))
+ : (samein6addr(sip6, other->sip6)));
+}
+
+Packet Packet::onlySource() const {
+ Packet p = *this;
+ std::fill(std::begin(p.dip6.s6_addr), std::end(p.dip6.s6_addr), 0);
+ p.dip.s_addr = 0;
+ p.dport = 0;
+ return p;
+}
+
+bool Packet::operator< (const Packet& other) const {
+ if (sa_family != other.sa_family)
+ return dir < other.sa_family;
+ /* source address first */
+ if (sport != other.sport)
+ return sport < other.sport;
+ if (sa_family == AF_INET) {
+ if (sip.s_addr != other.sip.s_addr)
+ return sip.s_addr < other.sip.s_addr;
+ } else {
+ for (int i = 0; i < 16; i++)
+ if (sip6.s6_addr[i] != other.sip6.s6_addr[i])
+ return sip6.s6_addr[i] < other.sip6.s6_addr[i];
+ }
+ /* destination address second */
+ if (dport != other.dport)
+ return dport < other.dport;
+ if (sa_family == AF_INET) {
+ if (dip.s_addr != other.dip.s_addr)
+ return dip.s_addr < other.dip.s_addr;
+ } else {
+ for (int i = 0; i < 16; i++)
+ if (dip6.s6_addr[i] != other.dip6.s6_addr[i])
+ return dip6.s6_addr[i] < other.dip6.s6_addr[i];
+ }
+ /* equal */
+ return false;
}
|
[-]
[+]
|
Changed |
_service:tar_git:nethogs-0.8.7+obs2.tar.gz/upstream/src/packet.h
^
|
@@ -70,8 +70,11 @@
/* is this packet coming from the local host? */
bool Outgoing();
- bool match(Packet *other);
- bool matchSource(Packet *other);
+ bool match(const Packet *other) const;
+ bool matchSource(const Packet *other) const;
+ /* returns a copy with destination information stripped (for comparisons) */
+ Packet onlySource() const;
+ bool operator< (const Packet& other) const;
/* returns '1.2.3.4:5-1.2.3.4:6'-style string */
char *gethashstring();
|
[-]
[+]
|
Changed |
_service:tar_git:nethogs-0.8.7+obs2.tar.gz/upstream/src/process.cpp
^
|
@@ -22,6 +22,7 @@
#include <iostream>
#include <ncurses.h>
+#include <set>
#include <string>
#include <strings.h>
#if !defined(__APPLE__) && !defined(__FreeBSD__)
@@ -34,6 +35,7 @@
#include <sys/stat.h>
#include <sys/types.h>
#include <unistd.h>
+#include <signal.h>
#include "conninode.h"
#include "inode2prog.h"
@@ -47,7 +49,8 @@
* key contains source ip, source port, destination ip, destination
* port in format: '1.2.3.4:5-1.2.3.4:5'
*/
-extern std::map<std::string, unsigned long> conninode;
+extern std::map<std::string, unsigned long> conninode_tcp;
+extern std::map<std::string, unsigned long> conninode_udp;
/* this file includes:
* - calls to inodeproc to get the pid that belongs to that inode
@@ -65,6 +68,8 @@
Process *unknownip;
ProcList *processes;
+extern std::set<pid_t> pidsToWatch;
+
#define KB (1UL << 10)
#define MB (1UL << 20)
#define GB (1UL << 30)
@@ -76,6 +81,7 @@
float tombps(u_int64_t bytes) { return (((double)bytes) / PERIOD) / MB; }
float togbps(u_int64_t bytes) { return (((double)bytes) / PERIOD) / GB; }
+
void process_init() {
unknowntcp = new Process(0, "", "unknown TCP");
processes = new ProcList(unknowntcp, NULL);
@@ -86,17 +92,15 @@
// unknownip = new Process (0, "", "unknown IP");
// processes = new ProcList (unknownip, processes);
}
+
}
int Process::getLastPacket() {
int lastpacket = 0;
- ConnList *curconn = connections;
- while (curconn != NULL) {
- assert(curconn != NULL);
- assert(curconn->getVal() != NULL);
- if (curconn->getVal()->getLastPacket() > lastpacket)
- lastpacket = curconn->getVal()->getLastPacket();
- curconn = curconn->getNext();
+ for (auto it = connections.begin(); it != connections.end(); ++it) {
+ assert(*it != NULL);
+ if ((*it)->getLastPacket() > lastpacket)
+ lastpacket = (*it)->getLastPacket();
}
return lastpacket;
}
@@ -106,30 +110,20 @@
u_int64_t &sum_recv) {
/* walk though all process_ptr process's connections, and sum
* them up */
- ConnList *curconn = process_ptr->connections;
- ConnList *previous = NULL;
- while (curconn != NULL) {
- if (curconn->getVal()->getLastPacket() <= curtime.tv_sec - CONNTIMEOUT) {
+ for (auto it = process_ptr->connections.begin(); it != process_ptr->connections.end(); ) {
+ if ((*it)->getLastPacket() <= curtime.tv_sec - CONNTIMEOUT) {
/* capture sent and received totals before deleting */
- process_ptr->sent_by_closed_bytes += curconn->getVal()->sumSent;
- process_ptr->rcvd_by_closed_bytes += curconn->getVal()->sumRecv;
+ process_ptr->sent_by_closed_bytes += (*it)->sumSent;
+ process_ptr->rcvd_by_closed_bytes += (*it)->sumRecv;
/* stalled connection, remove. */
- ConnList *todelete = curconn;
- Connection *conn_todelete = curconn->getVal();
- curconn = curconn->getNext();
- if (todelete == process_ptr->connections)
- process_ptr->connections = curconn;
- if (previous != NULL)
- previous->setNext(curconn);
- delete (todelete);
- delete (conn_todelete);
+ delete (*it);
+ it = process_ptr->connections.erase(it);
} else {
u_int64_t sent = 0, recv = 0;
- curconn->getVal()->sumanddel(curtime, &recv, &sent);
+ (*it)->sumanddel(curtime, &recv, &sent);
sum_sent += sent;
sum_recv += recv;
- previous = curconn;
- curconn = curconn->getNext();
+ ++it;
}
}
}
@@ -164,12 +158,10 @@
/** get total values for this process */
void Process::gettotal(u_int64_t *recvd, u_int64_t *sent) {
u_int64_t sum_sent = 0, sum_recv = 0;
- ConnList *curconn = this->connections;
- while (curconn != NULL) {
- Connection *conn = curconn->getVal();
+ for (auto it = this->connections.begin(); it != this->connections.end(); ++it) {
+ Connection *conn = (*it);
sum_sent += conn->sumSent;
sum_recv += conn->sumRecv;
- curconn = curconn->getNext();
}
// std::cout << "Sum sent: " << sum_sent << std::endl;
// std::cout << "Sum recv: " << sum_recv << std::endl;
@@ -261,6 +253,10 @@
if (proc != NULL)
return proc;
+ if ( !(pidsToWatch.empty()) && pidsToWatch.find(node->pid) == pidsToWatch.end() ) {
+ return NULL;
+ }
+
// extract program name and command line from data read from cmdline file
const char *prgname = node->cmdline.c_str();
const char *cmdline = prgname + strlen(prgname) + 1;
@@ -306,7 +302,10 @@
* is made. If no process can be found even then, it's added to the
* 'unknown' process.
*/
-Process *getProcess(Connection *connection, const char *devicename) {
+Process *getProcess(Connection *connection, const char *devicename,
+ short int packettype) {
+ std::map<std::string, unsigned long> &conninode =
+ (packettype == IPPROTO_TCP) ? conninode_tcp : conninode_udp;
unsigned long inode = conninode[connection->refpacket->gethashstring()];
if (inode == 0) {
@@ -370,15 +369,26 @@
}
Process *proc = NULL;
- if (inode != 0)
+ if (inode != 0) {
proc = getProcess(inode, devicename);
+ } else {
+ if (packettype == IPPROTO_TCP) {
+ proc = unknowntcp;
+ } else {
+ proc = unknownudp;
+ }
+ }
+
+ if (!(pidsToWatch.empty()) && proc == NULL) {
+ proc = (packettype == IPPROTO_TCP) ? unknowntcp : unknownudp;
+ }
if (proc == NULL) {
proc = new Process(inode, "", connection->refpacket->gethashstring());
processes = new ProcList(proc, processes);
}
- proc->connections = new ConnList(connection, proc->connections);
+ proc->connections.insert(connection);
return proc;
}
@@ -413,3 +423,5 @@
previousproc = curproc;
}
}
+
+void garbage_collect_processes() { garbage_collect_inodeproc(); }
|
[-]
[+]
|
Changed |
_service:tar_git:nethogs-0.8.7+obs2.tar.gz/upstream/src/process.h
^
|
@@ -26,32 +26,30 @@
#include "connection.h"
#include "nethogs.h"
#include <cassert>
+#include <set>
extern bool tracemode;
extern bool bughuntmode;
void check_all_procs();
-class ConnList {
-public:
- ConnList(Connection *m_val, ConnList *m_next) {
- assert(m_val != NULL);
- val = m_val;
- next = m_next;
+/* compares Connection pointers by their refpacket */
+struct ConnectionComparator {
+ using is_transparent = void;
+ bool operator()(const Connection* l, const Connection* r) const {
+ return *l->refpacket < *r->refpacket;
+ }
+ bool operator()(const Packet* l, const Connection* r) const {
+ return *l < *r->refpacket;
+ }
+ bool operator()(const Connection* l, const Packet* r) const {
+ return *l->refpacket < *r;
}
- ~ConnList() {
- /* does not delete its value, to allow a connection to
- * remove itself from the global connlist in its destructor */
- }
- Connection *getVal() { return val; }
- void setNext(ConnList *m_next) { next = m_next; }
- ConnList *getNext() { return next; }
-
-private:
- Connection *val;
- ConnList *next;
};
+/* ordered set of Connection pointers */
+typedef std::multiset<Connection*, ConnectionComparator> ConnList;
+
class Process {
public:
/* the process makes a copy of the name. the device name needs to be stable.
@@ -75,7 +73,6 @@
cmdline = strdup(m_cmdline);
devicename = m_devicename;
- connections = NULL;
pid = 0;
uid = 0;
sent_by_closed_bytes = 0;
@@ -106,7 +103,7 @@
u_int64_t sent_by_closed_bytes;
u_int64_t rcvd_by_closed_bytes;
- ConnList *connections;
+ ConnList connections;
uid_t getUid() { return uid; }
void setUid(uid_t m_uid) { uid = m_uid; }
@@ -134,7 +131,8 @@
Process *val;
};
-Process *getProcess(Connection *connection, const char *devicename = NULL);
+Process *getProcess(Connection *connection, const char *devicename = NULL,
+ short int packettype = IPPROTO_TCP);
void process_init();
@@ -144,4 +142,6 @@
void remove_timed_out_processes();
+void garbage_collect_processes();
+
#endif
|
[-]
[+]
|
Added |
_service:tar_git:nethogs-0.8.7+obs2.tar.gz/upstream/src/testfiles/proc_net_udp
^
|
@@ -0,0 +1,16 @@
+ sl local_address rem_address st tx_queue rx_queue tr tm->when retrnsmt uid timeout inode ref pointer drops
+ 39: 3419F40A:DB26 BDCC7D4A:01BB 01 00000000:00000000 00:00000000 00000000 1000 0 79657 2 0000000000000000 0
+ 1955: 3419F40A:E2A2 6319D9AC:01BB 01 00000000:00000000 00:00000000 00000000 1000 0 185469 2 0000000000000000 0
+ 4626: 00000000:ED11 00000000:0000 07 00000000:00000000 00:00000000 00000000 116 0 32328 2 0000000000000000 0
+ 8847: 3419F40A:BD8E BDCC7D4A:01BB 01 00000000:00000000 00:00000000 00000000 1000 0 51058 2 0000000000000000 0
+ 9526: 017AA8C0:0035 00000000:0000 07 00000000:00000000 00:00000000 00000000 0 0 35289 2 0000000000000000 0
+ 9526: 3500007F:0035 00000000:0000 07 00000000:00000000 00:00000000 00000000 101 0 26778 2 0000000000000000 0
+ 9540: 00000000:0043 00000000:0000 07 00000000:00000000 00:00000000 00000000 0 0 35286 2 0000000000000000 0
+ 9541: 00000000:0044 00000000:0000 07 00000000:00000000 00:00000000 00000000 0 0 35490 2 0000000000000000 0
+10104: 00000000:0277 00000000:0000 07 00000000:00000000 00:00000000 00000000 0 0 68859 2 0000000000000000 0
+13615: 3419F40A:D02E 8E1FD9AC:01BB 01 00000000:00000000 00:00000000 00000000 1000 0 184575 2 0000000000000000 0
+14826: FB0000E0:14E9 00000000:0000 07 00000000:00000000 00:00000000 00000000 1000 0 58803 2 0000000000000000 0
+14826: 00000000:14E9 00000000:0000 07 00000000:00000000 00:00000000 00000000 116 0 32326 2 0000000000000000 0
+15093: 3419F40A:95F4 AA6A7D4A:01BB 01 00000000:00000000 00:00000000 00000000 1000 0 180186 2 0000000000000000 0
+15432: 3419F40A:D747 431BD9AC:01BB 01 00000000:00000000 00:00000000 00000000 1000 0 186370 2 0000000000000000 0
+15816: 3419F40A:98C7 BDCC7D4A:01BB 01 00000000:00000000 00:00000000 00000000 1000 0 79872 2 0000000000000000 0
|
[-]
[+]
|
Added |
_service:tar_git:nethogs-0.8.7+obs2.tar.gz/upstream/src/testfiles/proc_net_udp_big
^
|
@@ -0,0 +1,48076 @@
+ sl local_address rem_address st tx_queue rx_queue tr tm->when retrnsmt uid timeout inode ref pointer drops
+ 39: 3419F40A:DB26 BDCC7D4A:01BB 01 00000000:00000000 00:00000000 00000000 1000 0 79657 2 0000000000000000 0
+ 1955: 3419F40A:E2A2 6319D9AC:01BB 01 00000000:00000000 00:00000000 00000000 1000 0 185469 2 0000000000000000 0
+ 4626: 00000000:ED11 00000000:0000 07 00000000:00000000 00:00000000 00000000 116 0 32328 2 0000000000000000 0
+ 8847: 3419F40A:BD8E BDCC7D4A:01BB 01 00000000:00000000 00:00000000 00000000 1000 0 51058 2 0000000000000000 0
+ 9526: 017AA8C0:0035 00000000:0000 07 00000000:00000000 00:00000000 00000000 0 0 35289 2 0000000000000000 0
+ 9526: 3500007F:0035 00000000:0000 07 00000000:00000000 00:00000000 00000000 101 0 26778 2 0000000000000000 0
+ 9540: 00000000:0043 00000000:0000 07 00000000:00000000 00:00000000 00000000 0 0 35286 2 0000000000000000 0
+ 9541: 00000000:0044 00000000:0000 07 00000000:00000000 00:00000000 00000000 0 0 35490 2 0000000000000000 0
+10104: 00000000:0277 00000000:0000 07 00000000:00000000 00:00000000 00000000 0 0 68859 2 0000000000000000 0
+13615: 3419F40A:D02E 8E1FD9AC:01BB 01 00000000:00000000 00:00000000 00000000 1000 0 184575 2 0000000000000000 0
+14826: FB0000E0:14E9 00000000:0000 07 00000000:00000000 00:00000000 00000000 1000 0 58803 2 0000000000000000 0
+14826: 00000000:14E9 00000000:0000 07 00000000:00000000 00:00000000 00000000 116 0 32326 2 0000000000000000 0
+15093: 3419F40A:95F4 AA6A7D4A:01BB 01 00000000:00000000 00:00000000 00000000 1000 0 180186 2 0000000000000000 0
+15432: 3419F40A:D747 431BD9AC:01BB 01 00000000:00000000 00:00000000 00000000 1000 0 186370 2 0000000000000000 0
+15816: 3419F40A:98C7 BDCC7D4A:01BB 01 00000000:00000000 00:00000000 00000000 1000 0 79872 2 0000000000000000 0
+ 39: 3419F40A:DB26 BDCC7D4A:01BB 01 00000000:00000000 00:00000000 00000000 1000 0 79657 2 0000000000000000 0
+ 1955: 3419F40A:E2A2 6319D9AC:01BB 01 00000000:00000000 00:00000000 00000000 1000 0 185469 2 0000000000000000 0
+ 4626: 00000000:ED11 00000000:0000 07 00000000:00000000 00:00000000 00000000 116 0 32328 2 0000000000000000 0
+ 8847: 3419F40A:BD8E BDCC7D4A:01BB 01 00000000:00000000 00:00000000 00000000 1000 0 51058 2 0000000000000000 0
+ 9526: 017AA8C0:0035 00000000:0000 07 00000000:00000000 00:00000000 00000000 0 0 35289 2 0000000000000000 0
+ 9526: 3500007F:0035 00000000:0000 07 00000000:00000000 00:00000000 00000000 101 0 26778 2 0000000000000000 0
+ 9540: 00000000:0043 00000000:0000 07 00000000:00000000 00:00000000 00000000 0 0 35286 2 0000000000000000 0
+ 9541: 00000000:0044 00000000:0000 07 00000000:00000000 00:00000000 00000000 0 0 35490 2 0000000000000000 0
+10104: 00000000:0277 00000000:0000 07 00000000:00000000 00:00000000 00000000 0 0 68859 2 0000000000000000 0
+13615: 3419F40A:D02E 8E1FD9AC:01BB 01 00000000:00000000 00:00000000 00000000 1000 0 184575 2 0000000000000000 0
+14826: FB0000E0:14E9 00000000:0000 07 00000000:00000000 00:00000000 00000000 1000 0 58803 2 0000000000000000 0
+14826: 00000000:14E9 00000000:0000 07 00000000:00000000 00:00000000 00000000 116 0 32326 2 0000000000000000 0
+15093: 3419F40A:95F4 AA6A7D4A:01BB 01 00000000:00000000 00:00000000 00000000 1000 0 180186 2 0000000000000000 0
+15432: 3419F40A:D747 431BD9AC:01BB 01 00000000:00000000 00:00000000 00000000 1000 0 186370 2 0000000000000000 0
+15816: 3419F40A:98C7 BDCC7D4A:01BB 01 00000000:00000000 00:00000000 00000000 1000 0 79872 2 0000000000000000 0
+ 39: 3419F40A:DB26 BDCC7D4A:01BB 01 00000000:00000000 00:00000000 00000000 1000 0 79657 2 0000000000000000 0
+ 1955: 3419F40A:E2A2 6319D9AC:01BB 01 00000000:00000000 00:00000000 00000000 1000 0 185469 2 0000000000000000 0
+ 4626: 00000000:ED11 00000000:0000 07 00000000:00000000 00:00000000 00000000 116 0 32328 2 0000000000000000 0
+ 8847: 3419F40A:BD8E BDCC7D4A:01BB 01 00000000:00000000 00:00000000 00000000 1000 0 51058 2 0000000000000000 0
+ 9526: 017AA8C0:0035 00000000:0000 07 00000000:00000000 00:00000000 00000000 0 0 35289 2 0000000000000000 0
+ 9526: 3500007F:0035 00000000:0000 07 00000000:00000000 00:00000000 00000000 101 0 26778 2 0000000000000000 0
+ 9540: 00000000:0043 00000000:0000 07 00000000:00000000 00:00000000 00000000 0 0 35286 2 0000000000000000 0
+ 9541: 00000000:0044 00000000:0000 07 00000000:00000000 00:00000000 00000000 0 0 35490 2 0000000000000000 0
+10104: 00000000:0277 00000000:0000 07 00000000:00000000 00:00000000 00000000 0 0 68859 2 0000000000000000 0
+13615: 3419F40A:D02E 8E1FD9AC:01BB 01 00000000:00000000 00:00000000 00000000 1000 0 184575 2 0000000000000000 0
+14826: FB0000E0:14E9 00000000:0000 07 00000000:00000000 00:00000000 00000000 1000 0 58803 2 0000000000000000 0
+14826: 00000000:14E9 00000000:0000 07 00000000:00000000 00:00000000 00000000 116 0 32326 2 0000000000000000 0
+15093: 3419F40A:95F4 AA6A7D4A:01BB 01 00000000:00000000 00:00000000 00000000 1000 0 180186 2 0000000000000000 0
+15432: 3419F40A:D747 431BD9AC:01BB 01 00000000:00000000 00:00000000 00000000 1000 0 186370 2 0000000000000000 0
+15816: 3419F40A:98C7 BDCC7D4A:01BB 01 00000000:00000000 00:00000000 00000000 1000 0 79872 2 0000000000000000 0
+ 39: 3419F40A:DB26 BDCC7D4A:01BB 01 00000000:00000000 00:00000000 00000000 1000 0 79657 2 0000000000000000 0
+ 1955: 3419F40A:E2A2 6319D9AC:01BB 01 00000000:00000000 00:00000000 00000000 1000 0 185469 2 0000000000000000 0
+ 4626: 00000000:ED11 00000000:0000 07 00000000:00000000 00:00000000 00000000 116 0 32328 2 0000000000000000 0
+ 8847: 3419F40A:BD8E BDCC7D4A:01BB 01 00000000:00000000 00:00000000 00000000 1000 0 51058 2 0000000000000000 0
+ 9526: 017AA8C0:0035 00000000:0000 07 00000000:00000000 00:00000000 00000000 0 0 35289 2 0000000000000000 0
+ 9526: 3500007F:0035 00000000:0000 07 00000000:00000000 00:00000000 00000000 101 0 26778 2 0000000000000000 0
+ 9540: 00000000:0043 00000000:0000 07 00000000:00000000 00:00000000 00000000 0 0 35286 2 0000000000000000 0
+ 9541: 00000000:0044 00000000:0000 07 00000000:00000000 00:00000000 00000000 0 0 35490 2 0000000000000000 0
+10104: 00000000:0277 00000000:0000 07 00000000:00000000 00:00000000 00000000 0 0 68859 2 0000000000000000 0
+13615: 3419F40A:D02E 8E1FD9AC:01BB 01 00000000:00000000 00:00000000 00000000 1000 0 184575 2 0000000000000000 0
+14826: FB0000E0:14E9 00000000:0000 07 00000000:00000000 00:00000000 00000000 1000 0 58803 2 0000000000000000 0
+14826: 00000000:14E9 00000000:0000 07 00000000:00000000 00:00000000 00000000 116 0 32326 2 0000000000000000 0
+15093: 3419F40A:95F4 AA6A7D4A:01BB 01 00000000:00000000 00:00000000 00000000 1000 0 180186 2 0000000000000000 0
+15432: 3419F40A:D747 431BD9AC:01BB 01 00000000:00000000 00:00000000 00000000 1000 0 186370 2 0000000000000000 0
+15816: 3419F40A:98C7 BDCC7D4A:01BB 01 00000000:00000000 00:00000000 00000000 1000 0 79872 2 0000000000000000 0
+ 39: 3419F40A:DB26 BDCC7D4A:01BB 01 00000000:00000000 00:00000000 00000000 1000 0 79657 2 0000000000000000 0
+ 1955: 3419F40A:E2A2 6319D9AC:01BB 01 00000000:00000000 00:00000000 00000000 1000 0 185469 2 0000000000000000 0
+ 4626: 00000000:ED11 00000000:0000 07 00000000:00000000 00:00000000 00000000 116 0 32328 2 0000000000000000 0
+ 8847: 3419F40A:BD8E BDCC7D4A:01BB 01 00000000:00000000 00:00000000 00000000 1000 0 51058 2 0000000000000000 0
+ 9526: 017AA8C0:0035 00000000:0000 07 00000000:00000000 00:00000000 00000000 0 0 35289 2 0000000000000000 0
+ 9526: 3500007F:0035 00000000:0000 07 00000000:00000000 00:00000000 00000000 101 0 26778 2 0000000000000000 0
+ 9540: 00000000:0043 00000000:0000 07 00000000:00000000 00:00000000 00000000 0 0 35286 2 0000000000000000 0
+ 9541: 00000000:0044 00000000:0000 07 00000000:00000000 00:00000000 00000000 0 0 35490 2 0000000000000000 0
+10104: 00000000:0277 00000000:0000 07 00000000:00000000 00:00000000 00000000 0 0 68859 2 0000000000000000 0
+13615: 3419F40A:D02E 8E1FD9AC:01BB 01 00000000:00000000 00:00000000 00000000 1000 0 184575 2 0000000000000000 0
+14826: FB0000E0:14E9 00000000:0000 07 00000000:00000000 00:00000000 00000000 1000 0 58803 2 0000000000000000 0
+14826: 00000000:14E9 00000000:0000 07 00000000:00000000 00:00000000 00000000 116 0 32326 2 0000000000000000 0
+15093: 3419F40A:95F4 AA6A7D4A:01BB 01 00000000:00000000 00:00000000 00000000 1000 0 180186 2 0000000000000000 0
+15432: 3419F40A:D747 431BD9AC:01BB 01 00000000:00000000 00:00000000 00000000 1000 0 186370 2 0000000000000000 0
+15816: 3419F40A:98C7 BDCC7D4A:01BB 01 00000000:00000000 00:00000000 00000000 1000 0 79872 2 0000000000000000 0
+ 39: 3419F40A:DB26 BDCC7D4A:01BB 01 00000000:00000000 00:00000000 00000000 1000 0 79657 2 0000000000000000 0
+ 1955: 3419F40A:E2A2 6319D9AC:01BB 01 00000000:00000000 00:00000000 00000000 1000 0 185469 2 0000000000000000 0
+ 4626: 00000000:ED11 00000000:0000 07 00000000:00000000 00:00000000 00000000 116 0 32328 2 0000000000000000 0
+ 8847: 3419F40A:BD8E BDCC7D4A:01BB 01 00000000:00000000 00:00000000 00000000 1000 0 51058 2 0000000000000000 0
+ 9526: 017AA8C0:0035 00000000:0000 07 00000000:00000000 00:00000000 00000000 0 0 35289 2 0000000000000000 0
+ 9526: 3500007F:0035 00000000:0000 07 00000000:00000000 00:00000000 00000000 101 0 26778 2 0000000000000000 0
+ 9540: 00000000:0043 00000000:0000 07 00000000:00000000 00:00000000 00000000 0 0 35286 2 0000000000000000 0
+ 9541: 00000000:0044 00000000:0000 07 00000000:00000000 00:00000000 00000000 0 0 35490 2 0000000000000000 0
+10104: 00000000:0277 00000000:0000 07 00000000:00000000 00:00000000 00000000 0 0 68859 2 0000000000000000 0
+13615: 3419F40A:D02E 8E1FD9AC:01BB 01 00000000:00000000 00:00000000 00000000 1000 0 184575 2 0000000000000000 0
+14826: FB0000E0:14E9 00000000:0000 07 00000000:00000000 00:00000000 00000000 1000 0 58803 2 0000000000000000 0
+14826: 00000000:14E9 00000000:0000 07 00000000:00000000 00:00000000 00000000 116 0 32326 2 0000000000000000 0
+15093: 3419F40A:95F4 AA6A7D4A:01BB 01 00000000:00000000 00:00000000 00000000 1000 0 180186 2 0000000000000000 0
+15432: 3419F40A:D747 431BD9AC:01BB 01 00000000:00000000 00:00000000 00000000 1000 0 186370 2 0000000000000000 0
+15816: 3419F40A:98C7 BDCC7D4A:01BB 01 00000000:00000000 00:00000000 00000000 1000 0 79872 2 0000000000000000 0
+ 39: 3419F40A:DB26 BDCC7D4A:01BB 01 00000000:00000000 00:00000000 00000000 1000 0 79657 2 0000000000000000 0
+ 1955: 3419F40A:E2A2 6319D9AC:01BB 01 00000000:00000000 00:00000000 00000000 1000 0 185469 2 0000000000000000 0
+ 4626: 00000000:ED11 00000000:0000 07 00000000:00000000 00:00000000 00000000 116 0 32328 2 0000000000000000 0
+ 8847: 3419F40A:BD8E BDCC7D4A:01BB 01 00000000:00000000 00:00000000 00000000 1000 0 51058 2 0000000000000000 0
+ 9526: 017AA8C0:0035 00000000:0000 07 00000000:00000000 00:00000000 00000000 0 0 35289 2 0000000000000000 0
+ 9526: 3500007F:0035 00000000:0000 07 00000000:00000000 00:00000000 00000000 101 0 26778 2 0000000000000000 0
+ 9540: 00000000:0043 00000000:0000 07 00000000:00000000 00:00000000 00000000 0 0 35286 2 0000000000000000 0
+ 9541: 00000000:0044 00000000:0000 07 00000000:00000000 00:00000000 00000000 0 0 35490 2 0000000000000000 0
+10104: 00000000:0277 00000000:0000 07 00000000:00000000 00:00000000 00000000 0 0 68859 2 0000000000000000 0
+13615: 3419F40A:D02E 8E1FD9AC:01BB 01 00000000:00000000 00:00000000 00000000 1000 0 184575 2 0000000000000000 0
+14826: FB0000E0:14E9 00000000:0000 07 00000000:00000000 00:00000000 00000000 1000 0 58803 2 0000000000000000 0
+14826: 00000000:14E9 00000000:0000 07 00000000:00000000 00:00000000 00000000 116 0 32326 2 0000000000000000 0
+15093: 3419F40A:95F4 AA6A7D4A:01BB 01 00000000:00000000 00:00000000 00000000 1000 0 180186 2 0000000000000000 0
+15432: 3419F40A:D747 431BD9AC:01BB 01 00000000:00000000 00:00000000 00000000 1000 0 186370 2 0000000000000000 0
+15816: 3419F40A:98C7 BDCC7D4A:01BB 01 00000000:00000000 00:00000000 00000000 1000 0 79872 2 0000000000000000 0
+ 39: 3419F40A:DB26 BDCC7D4A:01BB 01 00000000:00000000 00:00000000 00000000 1000 0 79657 2 0000000000000000 0
+ 1955: 3419F40A:E2A2 6319D9AC:01BB 01 00000000:00000000 00:00000000 00000000 1000 0 185469 2 0000000000000000 0
+ 4626: 00000000:ED11 00000000:0000 07 00000000:00000000 00:00000000 00000000 116 0 32328 2 0000000000000000 0
+ 8847: 3419F40A:BD8E BDCC7D4A:01BB 01 00000000:00000000 00:00000000 00000000 1000 0 51058 2 0000000000000000 0
+ 9526: 017AA8C0:0035 00000000:0000 07 00000000:00000000 00:00000000 00000000 0 0 35289 2 0000000000000000 0
+ 9526: 3500007F:0035 00000000:0000 07 00000000:00000000 00:00000000 00000000 101 0 26778 2 0000000000000000 0
+ 9540: 00000000:0043 00000000:0000 07 00000000:00000000 00:00000000 00000000 0 0 35286 2 0000000000000000 0
+ 9541: 00000000:0044 00000000:0000 07 00000000:00000000 00:00000000 00000000 0 0 35490 2 0000000000000000 0
+10104: 00000000:0277 00000000:0000 07 00000000:00000000 00:00000000 00000000 0 0 68859 2 0000000000000000 0
+13615: 3419F40A:D02E 8E1FD9AC:01BB 01 00000000:00000000 00:00000000 00000000 1000 0 184575 2 0000000000000000 0
+14826: FB0000E0:14E9 00000000:0000 07 00000000:00000000 00:00000000 00000000 1000 0 58803 2 0000000000000000 0
+14826: 00000000:14E9 00000000:0000 07 00000000:00000000 00:00000000 00000000 116 0 32326 2 0000000000000000 0
+15093: 3419F40A:95F4 AA6A7D4A:01BB 01 00000000:00000000 00:00000000 00000000 1000 0 180186 2 0000000000000000 0
+15432: 3419F40A:D747 431BD9AC:01BB 01 00000000:00000000 00:00000000 00000000 1000 0 186370 2 0000000000000000 0
+15816: 3419F40A:98C7 BDCC7D4A:01BB 01 00000000:00000000 00:00000000 00000000 1000 0 79872 2 0000000000000000 0
+ 39: 3419F40A:DB26 BDCC7D4A:01BB 01 00000000:00000000 00:00000000 00000000 1000 0 79657 2 0000000000000000 0
+ 1955: 3419F40A:E2A2 6319D9AC:01BB 01 00000000:00000000 00:00000000 00000000 1000 0 185469 2 0000000000000000 0
+ 4626: 00000000:ED11 00000000:0000 07 00000000:00000000 00:00000000 00000000 116 0 32328 2 0000000000000000 0
+ 8847: 3419F40A:BD8E BDCC7D4A:01BB 01 00000000:00000000 00:00000000 00000000 1000 0 51058 2 0000000000000000 0
+ 9526: 017AA8C0:0035 00000000:0000 07 00000000:00000000 00:00000000 00000000 0 0 35289 2 0000000000000000 0
+ 9526: 3500007F:0035 00000000:0000 07 00000000:00000000 00:00000000 00000000 101 0 26778 2 0000000000000000 0
+ 9540: 00000000:0043 00000000:0000 07 00000000:00000000 00:00000000 00000000 0 0 35286 2 0000000000000000 0
+ 9541: 00000000:0044 00000000:0000 07 00000000:00000000 00:00000000 00000000 0 0 35490 2 0000000000000000 0
+10104: 00000000:0277 00000000:0000 07 00000000:00000000 00:00000000 00000000 0 0 68859 2 0000000000000000 0
+13615: 3419F40A:D02E 8E1FD9AC:01BB 01 00000000:00000000 00:00000000 00000000 1000 0 184575 2 0000000000000000 0
+14826: FB0000E0:14E9 00000000:0000 07 00000000:00000000 00:00000000 00000000 1000 0 58803 2 0000000000000000 0
+14826: 00000000:14E9 00000000:0000 07 00000000:00000000 00:00000000 00000000 116 0 32326 2 0000000000000000 0
+15093: 3419F40A:95F4 AA6A7D4A:01BB 01 00000000:00000000 00:00000000 00000000 1000 0 180186 2 0000000000000000 0
+15432: 3419F40A:D747 431BD9AC:01BB 01 00000000:00000000 00:00000000 00000000 1000 0 186370 2 0000000000000000 0
+15816: 3419F40A:98C7 BDCC7D4A:01BB 01 00000000:00000000 00:00000000 00000000 1000 0 79872 2 0000000000000000 0
+ 39: 3419F40A:DB26 BDCC7D4A:01BB 01 00000000:00000000 00:00000000 00000000 1000 0 79657 2 0000000000000000 0
+ 1955: 3419F40A:E2A2 6319D9AC:01BB 01 00000000:00000000 00:00000000 00000000 1000 0 185469 2 0000000000000000 0
+ 4626: 00000000:ED11 00000000:0000 07 00000000:00000000 00:00000000 00000000 116 0 32328 2 0000000000000000 0
+ 8847: 3419F40A:BD8E BDCC7D4A:01BB 01 00000000:00000000 00:00000000 00000000 1000 0 51058 2 0000000000000000 0
+ 9526: 017AA8C0:0035 00000000:0000 07 00000000:00000000 00:00000000 00000000 0 0 35289 2 0000000000000000 0
+ 9526: 3500007F:0035 00000000:0000 07 00000000:00000000 00:00000000 00000000 101 0 26778 2 0000000000000000 0
+ 9540: 00000000:0043 00000000:0000 07 00000000:00000000 00:00000000 00000000 0 0 35286 2 0000000000000000 0
+ 9541: 00000000:0044 00000000:0000 07 00000000:00000000 00:00000000 00000000 0 0 35490 2 0000000000000000 0
+10104: 00000000:0277 00000000:0000 07 00000000:00000000 00:00000000 00000000 0 0 68859 2 0000000000000000 0
+13615: 3419F40A:D02E 8E1FD9AC:01BB 01 00000000:00000000 00:00000000 00000000 1000 0 184575 2 0000000000000000 0
+14826: FB0000E0:14E9 00000000:0000 07 00000000:00000000 00:00000000 00000000 1000 0 58803 2 0000000000000000 0
+14826: 00000000:14E9 00000000:0000 07 00000000:00000000 00:00000000 00000000 116 0 32326 2 0000000000000000 0
+15093: 3419F40A:95F4 AA6A7D4A:01BB 01 00000000:00000000 00:00000000 00000000 1000 0 180186 2 0000000000000000 0
+15432: 3419F40A:D747 431BD9AC:01BB 01 00000000:00000000 00:00000000 00000000 1000 0 186370 2 0000000000000000 0
+15816: 3419F40A:98C7 BDCC7D4A:01BB 01 00000000:00000000 00:00000000 00000000 1000 0 79872 2 0000000000000000 0
+ 39: 3419F40A:DB26 BDCC7D4A:01BB 01 00000000:00000000 00:00000000 00000000 1000 0 79657 2 0000000000000000 0
+ 1955: 3419F40A:E2A2 6319D9AC:01BB 01 00000000:00000000 00:00000000 00000000 1000 0 185469 2 0000000000000000 0
+ 4626: 00000000:ED11 00000000:0000 07 00000000:00000000 00:00000000 00000000 116 0 32328 2 0000000000000000 0
+ 8847: 3419F40A:BD8E BDCC7D4A:01BB 01 00000000:00000000 00:00000000 00000000 1000 0 51058 2 0000000000000000 0
+ 9526: 017AA8C0:0035 00000000:0000 07 00000000:00000000 00:00000000 00000000 0 0 35289 2 0000000000000000 0
+ 9526: 3500007F:0035 00000000:0000 07 00000000:00000000 00:00000000 00000000 101 0 26778 2 0000000000000000 0
+ 9540: 00000000:0043 00000000:0000 07 00000000:00000000 00:00000000 00000000 0 0 35286 2 0000000000000000 0
+ 9541: 00000000:0044 00000000:0000 07 00000000:00000000 00:00000000 00000000 0 0 35490 2 0000000000000000 0
+10104: 00000000:0277 00000000:0000 07 00000000:00000000 00:00000000 00000000 0 0 68859 2 0000000000000000 0
+13615: 3419F40A:D02E 8E1FD9AC:01BB 01 00000000:00000000 00:00000000 00000000 1000 0 184575 2 0000000000000000 0
+14826: FB0000E0:14E9 00000000:0000 07 00000000:00000000 00:00000000 00000000 1000 0 58803 2 0000000000000000 0
+14826: 00000000:14E9 00000000:0000 07 00000000:00000000 00:00000000 00000000 116 0 32326 2 0000000000000000 0
+15093: 3419F40A:95F4 AA6A7D4A:01BB 01 00000000:00000000 00:00000000 00000000 1000 0 180186 2 0000000000000000 0
+15432: 3419F40A:D747 431BD9AC:01BB 01 00000000:00000000 00:00000000 00000000 1000 0 186370 2 0000000000000000 0
+15816: 3419F40A:98C7 BDCC7D4A:01BB 01 00000000:00000000 00:00000000 00000000 1000 0 79872 2 0000000000000000 0
+ 39: 3419F40A:DB26 BDCC7D4A:01BB 01 00000000:00000000 00:00000000 00000000 1000 0 79657 2 0000000000000000 0
+ 1955: 3419F40A:E2A2 6319D9AC:01BB 01 00000000:00000000 00:00000000 00000000 1000 0 185469 2 0000000000000000 0
+ 4626: 00000000:ED11 00000000:0000 07 00000000:00000000 00:00000000 00000000 116 0 32328 2 0000000000000000 0
+ 8847: 3419F40A:BD8E BDCC7D4A:01BB 01 00000000:00000000 00:00000000 00000000 1000 0 51058 2 0000000000000000 0
+ 9526: 017AA8C0:0035 00000000:0000 07 00000000:00000000 00:00000000 00000000 0 0 35289 2 0000000000000000 0
+ 9526: 3500007F:0035 00000000:0000 07 00000000:00000000 00:00000000 00000000 101 0 26778 2 0000000000000000 0
+ 9540: 00000000:0043 00000000:0000 07 00000000:00000000 00:00000000 00000000 0 0 35286 2 0000000000000000 0
+ 9541: 00000000:0044 00000000:0000 07 00000000:00000000 00:00000000 00000000 0 0 35490 2 0000000000000000 0
+10104: 00000000:0277 00000000:0000 07 00000000:00000000 00:00000000 00000000 0 0 68859 2 0000000000000000 0
+13615: 3419F40A:D02E 8E1FD9AC:01BB 01 00000000:00000000 00:00000000 00000000 1000 0 184575 2 0000000000000000 0
+14826: FB0000E0:14E9 00000000:0000 07 00000000:00000000 00:00000000 00000000 1000 0 58803 2 0000000000000000 0
+14826: 00000000:14E9 00000000:0000 07 00000000:00000000 00:00000000 00000000 116 0 32326 2 0000000000000000 0
+15093: 3419F40A:95F4 AA6A7D4A:01BB 01 00000000:00000000 00:00000000 00000000 1000 0 180186 2 0000000000000000 0
+15432: 3419F40A:D747 431BD9AC:01BB 01 00000000:00000000 00:00000000 00000000 1000 0 186370 2 0000000000000000 0
+15816: 3419F40A:98C7 BDCC7D4A:01BB 01 00000000:00000000 00:00000000 00000000 1000 0 79872 2 0000000000000000 0
+ 39: 3419F40A:DB26 BDCC7D4A:01BB 01 00000000:00000000 00:00000000 00000000 1000 0 79657 2 0000000000000000 0
+ 1955: 3419F40A:E2A2 6319D9AC:01BB 01 00000000:00000000 00:00000000 00000000 1000 0 185469 2 0000000000000000 0
+ 4626: 00000000:ED11 00000000:0000 07 00000000:00000000 00:00000000 00000000 116 0 32328 2 0000000000000000 0
+ 8847: 3419F40A:BD8E BDCC7D4A:01BB 01 00000000:00000000 00:00000000 00000000 1000 0 51058 2 0000000000000000 0
+ 9526: 017AA8C0:0035 00000000:0000 07 00000000:00000000 00:00000000 00000000 0 0 35289 2 0000000000000000 0
+ 9526: 3500007F:0035 00000000:0000 07 00000000:00000000 00:00000000 00000000 101 0 26778 2 0000000000000000 0
+ 9540: 00000000:0043 00000000:0000 07 00000000:00000000 00:00000000 00000000 0 0 35286 2 0000000000000000 0
+ 9541: 00000000:0044 00000000:0000 07 00000000:00000000 00:00000000 00000000 0 0 35490 2 0000000000000000 0
+10104: 00000000:0277 00000000:0000 07 00000000:00000000 00:00000000 00000000 0 0 68859 2 0000000000000000 0
+13615: 3419F40A:D02E 8E1FD9AC:01BB 01 00000000:00000000 00:00000000 00000000 1000 0 184575 2 0000000000000000 0
+14826: FB0000E0:14E9 00000000:0000 07 00000000:00000000 00:00000000 00000000 1000 0 58803 2 0000000000000000 0
+14826: 00000000:14E9 00000000:0000 07 00000000:00000000 00:00000000 00000000 116 0 32326 2 0000000000000000 0
+15093: 3419F40A:95F4 AA6A7D4A:01BB 01 00000000:00000000 00:00000000 00000000 1000 0 180186 2 0000000000000000 0
+15432: 3419F40A:D747 431BD9AC:01BB 01 00000000:00000000 00:00000000 00000000 1000 0 186370 2 0000000000000000 0
+15816: 3419F40A:98C7 BDCC7D4A:01BB 01 00000000:00000000 00:00000000 00000000 1000 0 79872 2 0000000000000000 0
+ 39: 3419F40A:DB26 BDCC7D4A:01BB 01 00000000:00000000 00:00000000 00000000 1000 0 79657 2 0000000000000000 0
+ 1955: 3419F40A:E2A2 6319D9AC:01BB 01 00000000:00000000 00:00000000 00000000 1000 0 185469 2 0000000000000000 0
+ 4626: 00000000:ED11 00000000:0000 07 00000000:00000000 00:00000000 00000000 116 0 32328 2 0000000000000000 0
|
[-]
[+]
|
Changed |
_service:tar_git:nethogs.yaml
^
|
@@ -1,8 +1,8 @@
Name: nethogs
Summary: a small 'net top' tool
Group: Applications/Internet
-Version: 0.8.6
-Release: 5
+Version: 0.8.7
+Release: 1
License: GPLv2
URL: https://github.com/raboof/nethogs
SCM: https://github.com/raboof/nethogs
@@ -27,12 +27,14 @@
%if "%{?vendor}" == "chum"
Type: console-application
- DeveloperName: nephros
+ PackagerName: nephros
Categories:
- Network
- Utility
- - System
- Icon: https://gitlab.com/nephros/openrepos-nethogs/-/blob/obs/rpm/nethogs_512.png
+ Custom:
+ PackagingRepo: https://github.com/sailfishos-chum/nethogs
+ Repo: https://github.com/raboof/nethogs
+ Icon: https://github.com/sailfishos-chum/nethogs/raw/legacy/rpm/nethogs_256.png
%endif
#Macros:
@@ -43,7 +45,7 @@
# - libstdc++
PkgBR:
- libpcap-devel
- - gcc-c++
+ - gcc-c++ >= 8.0
PkgConfigBR:
- ncurses
Obsoletes:
|