Hacker News new | past | comments | ask | show | jobs | submit login
What: A terminal tool to check what is taking up your bandwidth (github.com/imsnif)
863 points by PleaseHelpMe on Dec 30, 2019 | hide | past | favorite | 180 comments


I am the author of "what" and am very happy to hear people like this tool I made. :)

"what" was my first real attempt at rust, and I love the project very much.

That said, it is a hobby project - and so I will likely be a few days responding to all issues and contributions that came from this thread.

"what" has already received some great contributions that are major parts of the code base. I would be very happy for more (in the form of features, bug fixes, issues and packaging).

A note to those having issues installing: as mentioned in this thread, packaging for all the various linux distributions and mac is a great effort. I apologize that at the moment the installation is a little bumpy (especially for those not very familiar with rust).

A good first step for if "cargo install what" isn't working is to try to `rustup update` so you get the latest version of rust and cargo.

Other than that, I hope to support your setup in the future, and/or hear from you in the issues of the repo. Debug help for OSes I do not have access to would be greatly appreciated. :)

Thank you all!

What are your thoughts on Rust so far? What primary language(s) did you come from?

I've been planning to learn Rust but haven't made the leap yet because I expect a big time commitment due to the learning curve. I poked around your source code and it was inspiring. Your code looks simple and straightforward compared to some of the other Rust projects I've examined.

That's high praise - thank you very much for saying so.

My major language in recent years has been javascript (and years before that perl). Rust was a breath of fresh air for me as I did not previously have "access" to system-level functionality.

I very much love the ease with which I can rely on other people's code (feels like home coming from node.js) - even though as mentioned in this thread it does have its downsides (eg. longer compiler times).

The learning curve is indeed challenging, but the tooling is amazing, the compiler has better error messages than I could even have imagined, and the community is incredibly friendly and welcoming. All in all, I'd say it's worth the effort. :)

Thanks for the tool. Easier install methods would be great. For now I've added the following to my bootstrap makefile:

    wget -qO- https://github.com/imsnif/what/releases/download/${WHAT_VERSION}/what-v${WHAT_VERSION}-x86_64-unknown-linux-musl.tar.gz |  tar xvz -C ~/bin/

Care to share the bootstrap makefile?


It's a mess and I've not used it for a while (haven't setup a new computer lately) but gets the point across.

It's amazing that your packaged linux binary release runs without issue on my decade old Ubuntu 10.04 box.

Any plans about create a library around this tool?

I'd be very happy to merge such a PR. Do you have a specific use case in mind?

Never used rust so I didn't know cargo was part of rust. Thought it was some other big install tool like brew.

Got it now but there's an error. Anyway, I've always wanted a tool like this, so I'm looking forward to its development. Thank you!

It's a tool to manage dependencies for rust and can also install rust programs (it will download, compile and install)

Bad naming..

  WHAT(1)                   BSD General Commands Manual                  WHAT(1)
       what -- show what versions of object modules were used to construct a file
(MacOS ...)

This is in the top class of utilities (htopm etc).

A good name could probably be bwtop, or tcptop or iftop.

Actually I searched for these, and turns out iftop exists! (https://linux.die.net/man/8/iftop)

My complaint about the name is that it would be hard to "google" it. This means if I don't bookmark it or remember where I found it, then a couple of years from now when my laptop needs to be rebuilt, I'll have the darndest time finding it to install it again.

This effectively made github my second search engine. We should have an AskHN on how to find software in general.

I’m using multiple search engines more and more. Possibly this is due to me usually bypassing google to avoid the ad laden hits. A view with search results from a few sources comes to mind as a solution. Another back burner project.

You can do this with browser search engines, but as a DuckDuckGo user, I can !bang search_term (`!gh`, `!github` to search in github.) Now, I think DuckDuckGo is very lacking in terms of Zero-click searching, but if I know where to get information I can !bang to it (e.g., `!hn what`) or if you're feeling luck `\hn what` will open the first search result. Much better than spending an afternoon setting up search engines.

3 year long user of DDG, never knew about the feeling lucky (\) option.

DDG has an Instant Answer API: https://duckduckgo.com/api

Hackernews Search is a better google for cool things I've found on the internet.

I just type in what I’m looking for and “news.ycombinator.com” at the end so that it links to a HN page. Sometimes I have to use site: to make sure it’s actually from HN, but works reasonably well.

with duck duck go you can just write !hn instead.

Every browser has book marking syncing in some capacity these days. It's the equivalent of losing contacts with a new phone in 1999.

Not without creating an account, on Android.

Chrome has no other export functionality. And firefox copied that lack-of-feature without even realizing the motivations.

So now one have to copy them one by one.

I must be misunderstanding something here, can you please explain the missing feature?

I load a set of bookmarks into Firefox on client machines regularly, but I suspect this isn’t what you are discussing.

I'm are talking firefox/chrome for android only. The only way to export bookmarks (and possibly import) is to register for an account and sync them.

There is no way to export them to an xml/whatever file (pretty sure you could at least in firefox before, but I guess it was too hard to maintain...).

Or create an account?

Surf with chrome logged in? Will never happen. Hard no as long as my sanity remains.

Firefox, maybe, haven't looked into it and just the process of evaluating it isn't worth it. Mozilla doesn't have the track record that I want to blindly trust them with that either.

I wouldn't recommend putting the onus on the end user to remember how to find your product. Too many assumptions.

That was a response to them having an issue with losing bookmarks. Are bookmarks in general now a negative onus?

As search engines have gotten better over the years, I find my use of bookmarks is usually write-once read-never.

Part of that is due to the fact that iOS is now my primary consumption platform, and finding bookmarks in a complex structure is much more awkward than it should be.

Part of it is just laziness: trying to manage a complex bookmark folder is more work than I care to do when search engines give me 99% of what I need.

For what it's worth I had the same problem with folder/hierarchically structured bookmarks, but tag-based bookmarking (like del.icio.us used to provide) meshed very well with me and my workflow so I wrote https://savecrate.com (still a WIP and rough around the edges but functional enough to work for me)

I even pay for pinboard and barely use it.

It'd be great if every time I went back to a website, all the pages on the site that I already bookmarked would pop in a sidebar...

> I find my use of bookmarks is usually write-once read-never

I found this with Instapaper. What was a bookmark and what was a read-later?

iftop is a remarkably useful utility. It's often one of the first things I install on new openwrt installations.

Ever since I installed SQM on openwrt, I don’t really care what’s using the bandwidth anymore since it doesn’t impact any other users on the network. :) It’s true though that iftop is a very useful tool.

Still nice in some cases to find applications/devices that are going wild due to a bug

iftop (and ifstat) are part of my preseed file, along with tcpdump, (and htop/iostat/pidstat/mpstat)

For a router I'd also put ntopng on.

Another option, since there are so many "tops," is something like psbw... Process bandwidth. Reminiscent of ps ax but ps bw.

whatif or whif would be great names

i really like whatif.

whif less so, that just doesn't seem to smell right.


tbqh reading `iftop` is not easy at all

'whence' would be more specific – it's archaic in English, it means 'from where' – although it's used within the ksh shell.

‘whence’ is POSIX-reserved even in shells that don't implement it¹. (‘what’ is also in POSIX². And ‘who’ is on first³.)

¹ https://pubs.opengroup.org/onlinepubs/9699919799/utilities/V...

² https://pubs.opengroup.org/onlinepubs/9699919799/idx/utiliti...

³ https://youtu.be/kTcRRaXV-fg

zsh also implements whence

ksh as well. Found someone’s reference to various “what” type commands[1]:

> The whence command is a Korn Shell feature that tells how a name would be interpreted by the shell: it detects commands and aliases, and searches your path.

[1] http://www.robelle.com/smugbook/whence.html

Perhaps 'whip' for 'what internet protocol'?

Is there a website one can test names against? Of course you can locally but that doesn't easily cover the distros you might be thinking of targeting.

I doubt any of these will help you if you pick the name of a shell builtin, but:

The closest (but not perfect) answer I know of is the open source project name checker (http://ivantomic.com/projects/ospnc/).

Repology (https://repology.org/projects/?search=what) can also help a bit, but it's less of a direct answer.

Another thing that isn't perfect but could help is doing a search of package contents of a large distro, e.g. here's a search of Debian for packages that provide a file called "node": https://packages.debian.org/search?searchon=contents&keyword...

The author has renamed this project to 'bandwhich'.

Good. Not a beautiful name but distinct, and still captures some of the meaning of the tool.

This is the main problem keeping me from using this right now. I don't like installing binaries that conflict with system package names because I'm tin foil about stability and the super small chance that some installation/config script for some other package I rely on references `what` and breaks.

@imsnif 2 questions:

1. Any chance you'd be willing to rename the package? I get it if not, but that would be so dope. 2. Would you consider putting this up as a cask on Brew? Brew is essentially the most popular package manager for Mac that I know of. This isn't as big of a deal for me honestly, but thought I'd ask.

1. Done. It's now known as "bandwhich" 2. This is in progress: https://github.com/imsnif/bandwhich/issues/9

I love the name.

When the bb is slow, it might be because someone is "hogging" the bb - so maybe "whathog"?

or "wiccapig/wicpig" (whichhog) ;-)

A good name would be "nettop"; it's so good that several projects (on github alone) have already used it as the name of some network monitor. The shortened "ntop" is also taken. At least two projects have claimed "iptop".

nettop already exists on macOS and does the same thing.


cargo install what (fails)

  Package `trust-dns-proto v0.18.0` does not have these features: `tokio-compat`
(MacOS 10.15.2)

This is one of the biggest problems I've had with any neat Rust thing posted up here. The language changes a lot. I have rust/cargo 1.37.0 installed (it's the latest marked stable in Gentoo) and adler32 v1.0.4 fails to compile with "`core::slice::<impl [T]>::len` is not yet stable as a const fn". I'm installing 1.40.0 from the unstable tree to see if that will build it.

I've had situations where I'm either not on the latest version of rust, or I'm on too current a version of rust, which deprecated/removed some feature needed for a dependency. I'm not sure if devs can define their min/max versions, but that kinda check should probably be done before cargo starts building packages.

Agreed, and I had the same problem. It seems like an easy fix to add a requires_rust_version thing in Cargo.toml, and devs could at least set it to "the version I'm currently using" so we know it's guaranteed to build on that.

It’s not that easy; the real world has a lot of complexity. That said, we finally did accept a design for this in October; it’s not clear when it’s going to land though.

Because of dependencies, you mean? Even an indication of "this builds fine for me at version X" would be good.

Tons of stuff. Various aspects of dependencies, for example, should this affect resolution? Is this a semver range? A minimum version? Is whatever we choose reasonably forward compatible for any extensions we might pick in the future? Can you write `cfg` attributes based on versions? Many of the same questions apply there. Etc etc etc.

It took about a year to get stuff figured out.

I also suspect that if the plan is to add this as an attribute that developers put in Cargo.toml then there will be a lot of packages that will have the value set to a higher version than need be.

Speaking for myself, I don't know in which exact version of Rust the features that I use was first introduced, and I don't think anyone else knows that either if they use a lot of different Rust language features.

So if I were to add a minimum required version to Cargo.toml for the crates that I put out, I would for sure end up putting the current stable version that I am using myself.

In practice I think that is probably fine, but also a bit unfortunate in a way, that anyone using an older version of Rust, such as those using distro packaged Rust will see Cargo tell them they can't build and run my crate, because I set minimum version to say 1.40.0, and they are using 1.37.0, but actually I might happen to not be using any features beyond what was available in 1.35.0 or whatever in some random crate of mine, but I don't know that and I don't wish to test every change I make to my crates in a bunch of older versions of Rust also because that would slow me down considerably.

On the other hand, if the Rust Team had the resources for it, could the crates.io service be made to detect minimum version of Rust needed based on the features used? Probably a lot of work I would guess. Doubly so when considering different feature flags and other cfg switches.

Again, I don't know the plans you have for how to do it so maybe you are already planning to do it that way but, you guys sometimes run builds on basically all of the crates on crates.io, don't you? Would it be feasible that the crates.io service runs a background service that builds each crate with a few different versions of Rust and records the build results and possibly test results into the meta data for the crates on crates.io? I think that would probably require a lot of server time, and therefore likely cost too much to be possible but it would have been really cool if it was doable.

I’m imagining that’s too much resources, yeah. It’s the same issue with anything that’s created by people; I’m sure that it’ll be fine over time. If and when we do LTS releases that’ll make it easier too...

There's no such thing as a "too current a version of rust". All Rust compilers (since 1.0) compile all previous versions of code and will continue to do so.

In the rare case you might hit something that was removed/modified because of a security exploit, but those are very very rare.

This is not true in practice. Old code has failed to compile for various reasons; off the top of my head, new additions to the prelude, and denied lints that became more restrictive. It's not super rare.

Just a nitpick: Rust 1.40 seems to be the stable version for a couple of weeks now.

First, it’s really cool that their using trust-dns! Second, they probably want to upgrade to the 0.18 release. It’s interesting that the cargo.lock file didn’t restrict the package versions for this case.

Anyway, this tool should probably upgrade to the current 0.18 release now that it’s out, if possible.

More evidence that the best names are short, pronounceable, and meaningless, like Hadoop. Git almost qualifies, except for the fact it's a pejorative, so using a really obscure or off-the-wall word is almost as good.

Marketers were forced into this by trademarks, but it shouldn't take the threat of a trademark lawsuit to convince you that stepping too close to something else's toes is annoying for everyone.

(And don't be afraid to go with words that have negative meanings: Aside from git, MUMPS has been a successful medical records database environment for decades.)

How is Git pejorative?

I haven't heard that word used like that, but I've only heard it to refer to the vcs.

The word “git” as a pejorative (calling someone unpleasant, e.g. “Linus Torvalds is such a git”) long predates the VCS. Linus himself chose the name for the VCS partly due to the meaning, sarcastically remarking that he was naming another project after himself (first Linux, then Git). See the Wikipedia entry for more detail: https://en.m.wikipedia.org/wiki/Git#Naming

Interesting, thanks!

Name has changed to "bandwhich" as suggested here: https://old.reddit.com/r/rust/comments/ehl68y/what_a_termina...

That is such a great name! I love it!

Installation with yay/crate can be slow. This small tool took 4 minutes of compile time, the Rust crates seem to be very fine granular (like node.js vor example) and require much compile time. 204 crates needed to be compiled.

I found that, using yay or another aur helper on arch linux, having a few rust utilities installed that have regular updates, significantly slows down the average system upgrade time. I tend to avoid Rust programs for that reason.

That's the nature of these spare time one (wo)man side projects: packaging a piece of software for a wide variety of distributions and platforms is tedious and boring, so unless there's a large community (or money) involved, you have to compile it from source.

Of course, you can always package your favourite utility for your favourite distribution. I'm sure the author would be thrilled to endorse your package in the Readme.

Note also that Rust can compile to portable static binaries. This tool is available as such from the releases page on GH (it's in the readme)

How is that musl based binary built ? I saw the repositories travis configuration and wasn't able to find anything relevant.

The simplest way is to pass the —target flag with the musl target; that should work unless you’re also including C code, and then it may Just Work or may need you to do something special.

I've been using `nethogs` for this for a long time, and it is already in most Linux repos and can be installed quickly.


Not at my computer atm, but nethogs won't list the process name/PID, will it?

Yes it does. That's the whole point

RPM and DEB packaging are going to help make it available to about 90% of Enterprise and cloud based Linux environments respectively. It's well worth the effort IMHO.

I added a package that uses the pre-built binaries, `what-bin` in the AUR.

204 depedencies?! Is that normal for a Rust project?

Depends on the size. It’s not unheard of.

Rust has a really good package manager, so it's pretty standard for projects to depend on a lot of things just from that.

Not too many direct deps

Networking: pnet, ipnetwork, trust-dns-resolver,

UI: tui, termion, structopt (CLI is UI)

Utility: signal-hook, failure, chrono, regex, lazy_static,

Async: tokio, async-trait

None of those seem egregious.

Direct dependencies is irrelevant, I could create a single dependency that wraps all of these and the problem being discussed remains unchanged.

A bit unrelated but I wrote https://github.com/amir/hepccn to list TCP connections by domains rather than just IPs. It filters connections to port 443 and 8443, downloads the peer certificate and then extracts the subject name (pretty sure I learned this trick from an article on Julia Evans' website but can't find it now). I wanted to add more functionalities to it but I stumbled upon an issue and that's for when SNI is enabled. I guess there's no way for me to recover the hostname the client has sent at the start of the handshaking process without introducing MITM, right?

You won't be able to recover it after the fact, but the SNI is cleartext on the wire as part of ClientHello even in TLS 1.3. Work to encrypt this is an ongoing effort (called eSNI).

You can recover SNI if you sniff from the very beginning, but not thereafter. It’s only sent once as part of the initial TLS handshake.

What are the main differences to something like nethogs or iftop?

They are similar but they answer different questions.

By default, iftop will tell you "this network interface on your machine is talking a lot to ycombinator.com". But you don't necessarily know which processes are doing the most talking collectively.

This will tell you "Firefox process 4567 is talking a lot ycombinator.com" and you'll know whether 4567 is also one of the chattiest talkers right now.

> This will tell you "Firefox process 4567 is talking a lot ycombinator.com" and you'll know whether 4567 is also one of the chattiest talkers right now.

But that's what nethogs does.

nethogs doesn't have the raw output mode. That could be useful. I'd take nethogs' real time display and what's raw output.

Looks like nethogs dones't work well on macos.

You try one of those first, then what's on second

But `whois` on first.

it's trendy to reinvent the wheel with Rust ?

It certainly is, but there is a merit to `what` too, in a different way of presenting the data.

What's wrong if someone want to make yet another x.

nothing. but it's useful to know if you need it if you already use similar tool.

Works on windows, osx too :)

The project page says it does not work on Windows.

Oh, I stopped reading at the install command, but can confirm, build fails :D

I find the --raw output more useful than the interactive one. it scrolls away but I have time to read what's going on. The other one just disappears and is replaced by something else, which could be ok except sometimes there are seconds of useless black screen when nothing is going on. I suggest to never have blank screens. A suggestion for the raw output: add a timestamp at the beginning of the line. Probably HHMMSS is enough but YYYYmmdd would be handy for logging in background.

Seconded. It might be a good idea to have a separate "top-so-far" section that can build-up over time to show the top consumers (and also allow sorting this by hostname to avoid too much jumping).

What's the difference between what and nettop?

Other similar tools:


I immediately thought if iftop and iptraf


There's already a ton of tools that do this. It's a nice show-off project but I doubt OP is in for the long haul.

Getting an error:

    121 |             len: bytes.len(),
        |                  ^^^^^^^^^^^

    error: aborting due to previous error

    error: Could not compile `bytes`.
    warning: build failed, waiting for other jobs to finish...

It requires a very recent version of rust. Do a 'rustup update' to get the latest stable release. You can't use the distribution's packages for rust and cargo if you want to play new rust programs.

Makes sense.

same. I tried googling around a bit, but nothing useful showed up :(.

I don't understand how rust/cargo work so just giving up at this point.

Thank you this is amazing. I have a bunch of virtual interfaces on my server and I have no idea what's using them or if they're even still in use what created them. This solved my problem instantly.

Looks awesome but the name makes it seem designed to be difficult to find in a search engine!

top of HN front page and without mentioning that it is written in Rust

What's that have to do with anything (it being top front page)? are there guidelines for naming posts so that the language a software is written in is preferably in the title?

Parent is probably being a bit sarcastic and referring to the perception that HN zeroes in and upvotes submissions based on how trendy the implementation language is.

Your bug report has since been addressed. (-:

Error: Failed to listen on network interface: No such file or directory (os error 2)

on macOS. Anyone else getting this error?

I get Error: Failed to listen on network interface: Operation not permitted (os error 1) on Arch Linux.

On macOS 10.14.6 the command starts but the frames stays empty (silent error) because of SIP

"Sandbox: lsof System Policy: deny(1)"

Otherwise, really nice idea and work!

I have SIP disabled, and I'm getting `Error: Failed to listen on network interface: No such file or directory (os error 2)`

Yep. checked on two different machines connecting to two different networks.

I'll take this moment to plug the tool 'origin', which plows through aliases and symlinks to find the executable behind a command: https://github.com/atorstling/origin

What connection does 'origin' have to 'what'?

I thought it was scratching a similar itch - simplifying a common everyday task

On Windows I find TCPView from good old Sysinternals to be perfect for this job.

Why do I need cargo to install on mac? (It would be nice to have a link to install)

Updated To install run: curl https://sh.rustup.rs -sSf | sh

Cargo is Rust's build tool. You need cargo because you're building it from source.

Cargo isn't easily google-able ... I was hoping someone would link how to install it, instead of being sassy.

I figured it out.

It can be found here: https://doc.rust-lang.org/cargo/getting-started/installation...

You can install it easily by running this: curl https://sh.rustup.rs -sSf | sh

Very first result for "cargo tool programming"


You're getting snark because your own snarky comment is the equivalent of saying "Why do I need Make to run it on the MacOS?" If you had asked instead, "What is cargo, and how do I install it?" you would get more helpful responses. Snark is met with snark.

And how people are supposed to know that it is a programming tool? I assumed that it is yet another package manager and googling about cargo brings results about logistics.

It took me a few tries before figuring it out. What worked was "Install cargo MacOS" and it was hard to tell if the results are not a scam to make me install some spyware.

You assumed right, Cargo is the Rust package manager

Because the author hasn't packaged it for you. Cargo is what you'll need to build this from source.

brew install rust

'bandwhich' I like the new name a lot!

Thank god for the name change! I saw this project this morning and it looked super interesting. I tried googling around for it to install it, but nothing worked haha "bandwith monitor what", "github rust what", etc. And this is coming from a hypocrite who's most popular project is named 'c'.

Bandwhich is a clever and easy to find name!

Running Catalina, with sudo I'm able to get the screen up and running, but at first data I get a panic:

thread 'display_handler' panicked at 'overflow when subtracting durations', src/libcore/option.rs:1185:5 note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace.

I'm not surprised about OS X, recent OS versions have been making it more and more different from how the OS previously worked. For example GDB doesn't work anymore, and neither does valgrind.

> neither does valgrind

Woah, that's a huge step backward. How do they expect anyone to write half-decent C for their operating system without valgrind?

Plot twist. It's the tool

Would be interesting to know how many people actually look at the source before they compile and run random repos posted here.

I would imagine the rate is in inverse proportion to the number of upvotes.

Looking at how it does reverse DNS lookups to try and map backwards... is there such thing as a crowdsourced database that resolves the most common domain name(s) that resulted in a given IP address? Seems like this would be tremendously useful for any sort of network tooling, but I can’t find any references from a quick search.

You do realize that multiple domains may be hiding behind the same IP address? This is very common with CDNs (although the bigger players can afford a static CDN IP, I guess)

Robtex.com and some similar animals have some historic mappings, though of course not comprehensive.

What can be a reason if on MacOS it does not capture traffic? I see empty panels. Tried to run with and without `sudo`.

Yeah, I'm also just getting blank panels.. Mojave 10.14.6

Same here. Tried different interfaces. Nothing.

Another poster did mention that a similarly named utility already exists on MacOS. Perhaps you’re invoking that instead?

Yes name is not unique and conflicting with existing tool. I'm launching exact this utility by defining path as


  sudo ~/.cargo/bin/what

Catalina: getting "failed to listen" when running non-root, Shows empty panels when ran with sudo.

You can run as non-root by using setcap to give extra capabilites to the binary:

  sudo setcap cap_net_raw,cap_net_admin=eip <path_to_what_binary>

setcap is Linux-specific thing. Doesn't exist on freebsd, darwin(macosx) or any other unix.

yep, on macOS 10.14.6 the command starts but the panes stays empty (silent error) because of SIP "Sandbox: lsof System Policy: deny(1)"

Is there a way to fix this?

Very nice. I dream of the day our networking instrumentation is good enough that when I click on a link and my browser hangs doing nothing, I can switch to my monitor app and have it tell me exactly where the route is failing.

For some reason (possibly security limitations) it doesn't seem to be able to monitor connections over a WireGuard connection's tunX interface.


Would you be willing to open an issue in the github repo? I am not aware of this bug and would be very happy to address it.

I would especially be interested if this happens to be the same bug as: https://github.com/imsnif/bandwhich/issues/51


Will give this a spin, but anyone who enjoys this might like to take a look at the etherape package, I really like its visualizations.

Is sudo required? I get

    Error: Failed to listen on network interface: Operation not permitted (os error 1)

Seems that way - error went away with sudo

Can I now trash iftop and nethogs?

Topnet might be a better name.

I need this for windows.

I used to use Glasswire, however did not like the yearly subscription and limited interface.

Now I use NetLimiter 4: https://www.netlimiter.com/

Among other features like process blocking, it has a process list not very different than this utility as well has bandwidth graphing over a period in time which is very useful in tracking down bandwidth hogs on a monthly capped DSL line. https://www.netlimiter.com/docs/netlimiter-overview/features...

Netlimiter is amazing. Using it for many years. Highly recommended.

GlassWire has some statistics related to processes and remote connections: https://www.glasswire.com/features/#bandwidth

TcpView and built-in Resource Monitor come pretty close actually. Not the exact same feature set perhaps, but if the question is 'what is taking up bandwidth and to which address' then they do the job.

would this work with WSL...dont think it would with wsl2 since it runs in a virtual kernel. It could work with WSL though, very curious if anyone can get it to work

Maybe you should call it iWhat? Anyway, great program!

Is this the future? I am setting this up on my macOS, and before I could 'cargo add' anything I had to 'brew install rust'. Now it is downloading and compiling lots and lots of dependencies.

you only will need to "cargo install <X>" now that you've got the rust compiler and cargo installed on your machine

Indeed. I couldn't get the tool working once it was downloaded and compiled. iftop works fine.

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact