Repository files navigation

fping-rust

githubRust CIDownloadsCrates.io

fping-rust is an attempt to port the fping program to Rust. It includes some features not found in the original fping, while others are missing.

This version is licensed under the GPL

Original

Original fping is a program to send ICMP echo probes to network hosts, similar to ping, but much better performing when pinging multiple hosts. fping has a long long story: Roland Schemers did publish a first version of it in 1992 and it has established itself since then as a standard tool.

Installation

Installation is quite simple and can be done directly from crates.io

cargo install fping-rust

Make fping either setuid, or, if under Linux

sudo setcap cap_net_raw,cap_net_admin+ep fping`

If you can't run fping as root or can't use the cap_net_raw capability, you can also run fping in unprivileged mode. This works on MacOS and also on Linux, provided that your GID is included in the range defined in /proc/sys/net/ipv4/ping_group_range. This is particularly useful for running fping-rust in rootless / unprivileged containers.

echo "net.ipv4.ping_group_range = 0 2147483647" >> /etc/sysctl.d/local.conf

Development

Build the project with Cargo in debug mode

make build

Run the tests using Cargo

make test

Build a release version of the project using Cargo

make build-release

Alternatively: Builds and packages the binaries

make package

Cleans up build artifacts

make clean

Usage

Fast ping to multiple hosts
Usage: fping [OPTIONS] [TARGETS]...
Arguments:
[TARGETS]... Target hosts
Options:
-c, --count <N> Count mode: send N pings to each target
-C, --vcount <N> Same as -c but verbose output (all RTTs)
-l, --loop Loop mode: send pings forever
-i, --interval <MSEC> Interval between packets in ms (default: 10) [default: 10]
-p, --period <MSEC> Per-host interval in ms (default: 1000) [default: 1000]
-t, --timeout <MSEC> Timeout in ms (default: 500) [default: 500]
-r, --retry <RETRY> Number of retries (default: 3) [default: 3]
-B, --backoff <BACKOFF> Exponential backoff factor (default: 1.5) [default: 1.5]
-b, --size <BYTES> Ping data size in bytes (default: 56) [default: 56]
-M, --dontfrag Set the Don't Fragment bit (PMTU discover)
--frag Allow fragmentation (explicitly disable Don't Fragment bit)
-f, --file <FILE> Read hosts from file (- = stdin)
-a, --alive Show only alive hosts
-u, --unreach Show only unreachable hosts
-q, --quiet Quiet: don't show per-ping results
-s, --stats Print final stats
-e, --elapsed Show elapsed time on received packets
-A, --addr Show targets by address
-D, --timestamp Timestamp before each line
-J, --json JSON output (requires -c, -C or -l)
-4, --ipv4 Use IPv4 only
-6, --ipv6 Use IPv6 only
--report-all-rtts Show all individual RTTs
-x, --reachable <N> Minimum number of reachable hosts to be considered success
-S, --source <SOURCE> Source address for outgoing pings
-T, --tcp Use TCP ping instead of ICMP
--port <PORT> Port for TCP ping (default: 80) [default: 80]
--oiface <IFACE> Bind outgoing packets to this network interface (e.g. eth0)
--print-reply-dst Displays the destination address of the received reply packet
--tui Enable interactive TUI mode (ncurses)
-h, --help Print help
-V, --version Print version

Test

Run all tests

cargo test

Run special test

cargo test --test args_tests
cargo test --test dns_tests
cargo test --test output_tests
cargo test --test socket_tests
cargo test --test types_tests

Run specific test by name

cargo test --test types_tests loss_pct_50

Overview of the test files

FileDescriptionroot required
args_tests.rsCLI argument parsing, default valuesNo
dns_tests.rsHostname resolution, IP filteringNo*
output_tests.rssprint_tm, max_host_lenNo
socket_tests.rsPacket construction, checksum, ID/Seq encodingNo
types_tests.rsHostEntry logic, statisticsNo

* Network access is required for DNS resolution (localhost is always available).

Reference

About

High-performance ping tool fping-rust as an attempt to translate fping into Rust

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

fping-rust

githubRust CIDownloadsCrates.io

fping-rust is an attempt to port the fping program to Rust. It includes some features not found in the original fping, while others are missing.

This version is licensed under the GPL

Original

Original fping is a program to send ICMP echo probes to network hosts, similar to ping, but much better performing when pinging multiple hosts. fping has a long long story: Roland Schemers did publish a first version of it in 1992 and it has established itself since then as a standard tool.

Installation

Installation is quite simple and can be done directly from crates.io

cargo install fping-rust

Make fping either setuid, or, if under Linux

sudo setcap cap_net_raw,cap_net_admin+ep fping`

If you can't run fping as root or can't use the cap_net_raw capability, you can also run fping in unprivileged mode. This works on MacOS and also on Linux, provided that your GID is included in the range defined in /proc/sys/net/ipv4/ping_group_range. This is particularly useful for running fping-rust in rootless / unprivileged containers.

echo "net.ipv4.ping_group_range = 0 2147483647" >> /etc/sysctl.d/local.conf

Development

Build the project with Cargo in debug mode

make build

Run the tests using Cargo

make test

Build a release version of the project using Cargo

make build-release

Alternatively: Builds and packages the binaries

make package

Cleans up build artifacts

make clean

Usage

Fast ping to multiple hosts
Usage: fping [OPTIONS] [TARGETS]...
Arguments:
[TARGETS]... Target hosts
Options:
-c, --count <N> Count mode: send N pings to each target
-C, --vcount <N> Same as -c but verbose output (all RTTs)
-l, --loop Loop mode: send pings forever
-i, --interval <MSEC> Interval between packets in ms (default: 10) [default: 10]
-p, --period <MSEC> Per-host interval in ms (default: 1000) [default: 1000]
-t, --timeout <MSEC> Timeout in ms (default: 500) [default: 500]
-r, --retry <RETRY> Number of retries (default: 3) [default: 3]
-B, --backoff <BACKOFF> Exponential backoff factor (default: 1.5) [default: 1.5]
-b, --size <BYTES> Ping data size in bytes (default: 56) [default: 56]
-M, --dontfrag Set the Don't Fragment bit (PMTU discover)
--frag Allow fragmentation (explicitly disable Don't Fragment bit)
-f, --file <FILE> Read hosts from file (- = stdin)
-a, --alive Show only alive hosts
-u, --unreach Show only unreachable hosts
-q, --quiet Quiet: don't show per-ping results
-s, --stats Print final stats
-e, --elapsed Show elapsed time on received packets
-A, --addr Show targets by address
-D, --timestamp Timestamp before each line
-J, --json JSON output (requires -c, -C or -l)
-4, --ipv4 Use IPv4 only
-6, --ipv6 Use IPv6 only
--report-all-rtts Show all individual RTTs
-x, --reachable <N> Minimum number of reachable hosts to be considered success
-S, --source <SOURCE> Source address for outgoing pings
-T, --tcp Use TCP ping instead of ICMP
--port <PORT> Port for TCP ping (default: 80) [default: 80]
--oiface <IFACE> Bind outgoing packets to this network interface (e.g. eth0)
--print-reply-dst Displays the destination address of the received reply packet
--tui Enable interactive TUI mode (ncurses)
-h, --help Print help
-V, --version Print version

Test

Run all tests

cargo test

Run special test

cargo test --test args_tests
cargo test --test dns_tests
cargo test --test output_tests
cargo test --test socket_tests
cargo test --test types_tests

Run specific test by name

cargo test --test types_tests loss_pct_50

Overview of the test files

FileDescriptionroot required
args_tests.rsCLI argument parsing, default valuesNo
dns_tests.rsHostname resolution, IP filteringNo*
output_tests.rssprint_tm, max_host_lenNo
socket_tests.rsPacket construction, checksum, ID/Seq encodingNo
types_tests.rsHostEntry logic, statisticsNo

* Network access is required for DNS resolution (localhost is always available).

Reference

About

High-performance ping tool fping-rust as an attempt to translate fping into Rust

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

fping-rust

githubRust CIDownloadsCrates.io

fping-rust is an attempt to port the fping program to Rust. It includes some features not found in the original fping, while others are missing.

This version is licensed under the GPL

Original

Original fping is a program to send ICMP echo probes to network hosts, similar to ping, but much better performing when pinging multiple hosts. fping has a long long story: Roland Schemers did publish a first version of it in 1992 and it has established itself since then as a standard tool.

Installation

Installation is quite simple and can be done directly from crates.io

cargo install fping-rust

Make fping either setuid, or, if under Linux

sudo setcap cap_net_raw,cap_net_admin+ep fping`

If you can't run fping as root or can't use the cap_net_raw capability, you can also run fping in unprivileged mode. This works on MacOS and also on Linux, provided that your GID is included in the range defined in /proc/sys/net/ipv4/ping_group_range. This is particularly useful for running fping-rust in rootless / unprivileged containers.

echo "net.ipv4.ping_group_range = 0 2147483647" >> /etc/sysctl.d/local.conf

Development

Build the project with Cargo in debug mode

make build

Run the tests using Cargo

make test

Build a release version of the project using Cargo

make build-release

Alternatively: Builds and packages the binaries

make package

Cleans up build artifacts

make clean

Usage

Fast ping to multiple hosts
Usage: fping [OPTIONS] [TARGETS]...
Arguments:
[TARGETS]... Target hosts
Options:
-c, --count <N> Count mode: send N pings to each target
-C, --vcount <N> Same as -c but verbose output (all RTTs)
-l, --loop Loop mode: send pings forever
-i, --interval <MSEC> Interval between packets in ms (default: 10) [default: 10]
-p, --period <MSEC> Per-host interval in ms (default: 1000) [default: 1000]
-t, --timeout <MSEC> Timeout in ms (default: 500) [default: 500]
-r, --retry <RETRY> Number of retries (default: 3) [default: 3]
-B, --backoff <BACKOFF> Exponential backoff factor (default: 1.5) [default: 1.5]
-b, --size <BYTES> Ping data size in bytes (default: 56) [default: 56]
-M, --dontfrag Set the Don't Fragment bit (PMTU discover)
--frag Allow fragmentation (explicitly disable Don't Fragment bit)
-f, --file <FILE> Read hosts from file (- = stdin)
-a, --alive Show only alive hosts
-u, --unreach Show only unreachable hosts
-q, --quiet Quiet: don't show per-ping results
-s, --stats Print final stats
-e, --elapsed Show elapsed time on received packets
-A, --addr Show targets by address
-D, --timestamp Timestamp before each line
-J, --json JSON output (requires -c, -C or -l)
-4, --ipv4 Use IPv4 only
-6, --ipv6 Use IPv6 only
--report-all-rtts Show all individual RTTs
-x, --reachable <N> Minimum number of reachable hosts to be considered success
-S, --source <SOURCE> Source address for outgoing pings
-T, --tcp Use TCP ping instead of ICMP
--port <PORT> Port for TCP ping (default: 80) [default: 80]
--oiface <IFACE> Bind outgoing packets to this network interface (e.g. eth0)
--print-reply-dst Displays the destination address of the received reply packet
--tui Enable interactive TUI mode (ncurses)
-h, --help Print help
-V, --version Print version

Test

Run all tests

cargo test

Run special test

cargo test --test args_tests
cargo test --test dns_tests
cargo test --test output_tests
cargo test --test socket_tests
cargo test --test types_tests

Run specific test by name

cargo test --test types_tests loss_pct_50

Overview of the test files

FileDescriptionroot required
args_tests.rsCLI argument parsing, default valuesNo
dns_tests.rsHostname resolution, IP filteringNo*
output_tests.rssprint_tm, max_host_lenNo
socket_tests.rsPacket construction, checksum, ID/Seq encodingNo
types_tests.rsHostEntry logic, statisticsNo

* Network access is required for DNS resolution (localhost is always available).

Reference

About

High-performance ping tool fping-rust as an attempt to translate fping into Rust

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

fping-rust

githubRust CIDownloadsCrates.io

fping-rust is an attempt to port the fping program to Rust. It includes some features not found in the original fping, while others are missing.

This version is licensed under the GPL

Original

Original fping is a program to send ICMP echo probes to network hosts, similar to ping, but much better performing when pinging multiple hosts. fping has a long long story: Roland Schemers did publish a first version of it in 1992 and it has established itself since then as a standard tool.

Installation

Installation is quite simple and can be done directly from crates.io

cargo install fping-rust

Make fping either setuid, or, if under Linux

sudo setcap cap_net_raw,cap_net_admin+ep fping`

If you can't run fping as root or can't use the cap_net_raw capability, you can also run fping in unprivileged mode. This works on MacOS and also on Linux, provided that your GID is included in the range defined in /proc/sys/net/ipv4/ping_group_range. This is particularly useful for running fping-rust in rootless / unprivileged containers.

echo "net.ipv4.ping_group_range = 0 2147483647" >> /etc/sysctl.d/local.conf

Development

Build the project with Cargo in debug mode

make build

Run the tests using Cargo

make test

Build a release version of the project using Cargo

make build-release

Alternatively: Builds and packages the binaries

make package

Cleans up build artifacts

make clean

Usage

Fast ping to multiple hosts
Usage: fping [OPTIONS] [TARGETS]...
Arguments:
[TARGETS]... Target hosts
Options:
-c, --count <N> Count mode: send N pings to each target
-C, --vcount <N> Same as -c but verbose output (all RTTs)
-l, --loop Loop mode: send pings forever
-i, --interval <MSEC> Interval between packets in ms (default: 10) [default: 10]
-p, --period <MSEC> Per-host interval in ms (default: 1000) [default: 1000]
-t, --timeout <MSEC> Timeout in ms (default: 500) [default: 500]
-r, --retry <RETRY> Number of retries (default: 3) [default: 3]
-B, --backoff <BACKOFF> Exponential backoff factor (default: 1.5) [default: 1.5]
-b, --size <BYTES> Ping data size in bytes (default: 56) [default: 56]
-M, --dontfrag Set the Don't Fragment bit (PMTU discover)
--frag Allow fragmentation (explicitly disable Don't Fragment bit)
-f, --file <FILE> Read hosts from file (- = stdin)
-a, --alive Show only alive hosts
-u, --unreach Show only unreachable hosts
-q, --quiet Quiet: don't show per-ping results
-s, --stats Print final stats
-e, --elapsed Show elapsed time on received packets
-A, --addr Show targets by address
-D, --timestamp Timestamp before each line
-J, --json JSON output (requires -c, -C or -l)
-4, --ipv4 Use IPv4 only
-6, --ipv6 Use IPv6 only
--report-all-rtts Show all individual RTTs
-x, --reachable <N> Minimum number of reachable hosts to be considered success
-S, --source <SOURCE> Source address for outgoing pings
-T, --tcp Use TCP ping instead of ICMP
--port <PORT> Port for TCP ping (default: 80) [default: 80]
--oiface <IFACE> Bind outgoing packets to this network interface (e.g. eth0)
--print-reply-dst Displays the destination address of the received reply packet
--tui Enable interactive TUI mode (ncurses)
-h, --help Print help
-V, --version Print version

Test

Run all tests

cargo test

Run special test

cargo test --test args_tests
cargo test --test dns_tests
cargo test --test output_tests
cargo test --test socket_tests
cargo test --test types_tests

Run specific test by name

cargo test --test types_tests loss_pct_50

Overview of the test files

FileDescriptionroot required
args_tests.rsCLI argument parsing, default valuesNo
dns_tests.rsHostname resolution, IP filteringNo*
output_tests.rssprint_tm, max_host_lenNo
socket_tests.rsPacket construction, checksum, ID/Seq encodingNo
types_tests.rsHostEntry logic, statisticsNo

* Network access is required for DNS resolution (localhost is always available).

Reference

About

High-performance ping tool fping-rust as an attempt to translate fping into Rust

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

fping-rust

githubRust CIDownloadsCrates.io

fping-rust is an attempt to port the fping program to Rust. It includes some features not found in the original fping, while others are missing.

This version is licensed under the GPL

Original

Original fping is a program to send ICMP echo probes to network hosts, similar to ping, but much better performing when pinging multiple hosts. fping has a long long story: Roland Schemers did publish a first version of it in 1992 and it has established itself since then as a standard tool.

Installation

Installation is quite simple and can be done directly from crates.io

cargo install fping-rust

Make fping either setuid, or, if under Linux

sudo setcap cap_net_raw,cap_net_admin+ep fping`

If you can't run fping as root or can't use the cap_net_raw capability, you can also run fping in unprivileged mode. This works on MacOS and also on Linux, provided that your GID is included in the range defined in /proc/sys/net/ipv4/ping_group_range. This is particularly useful for running fping-rust in rootless / unprivileged containers.

echo "net.ipv4.ping_group_range = 0 2147483647" >> /etc/sysctl.d/local.conf

Development

Build the project with Cargo in debug mode

make build

Run the tests using Cargo

make test

Build a release version of the project using Cargo

make build-release

Alternatively: Builds and packages the binaries

make package

Cleans up build artifacts

make clean

Usage

Fast ping to multiple hosts
Usage: fping [OPTIONS] [TARGETS]...
Arguments:
[TARGETS]... Target hosts
Options:
-c, --count <N> Count mode: send N pings to each target
-C, --vcount <N> Same as -c but verbose output (all RTTs)
-l, --loop Loop mode: send pings forever
-i, --interval <MSEC> Interval between packets in ms (default: 10) [default: 10]
-p, --period <MSEC> Per-host interval in ms (default: 1000) [default: 1000]
-t, --timeout <MSEC> Timeout in ms (default: 500) [default: 500]
-r, --retry <RETRY> Number of retries (default: 3) [default: 3]
-B, --backoff <BACKOFF> Exponential backoff factor (default: 1.5) [default: 1.5]
-b, --size <BYTES> Ping data size in bytes (default: 56) [default: 56]
-M, --dontfrag Set the Don't Fragment bit (PMTU discover)
--frag Allow fragmentation (explicitly disable Don't Fragment bit)
-f, --file <FILE> Read hosts from file (- = stdin)
-a, --alive Show only alive hosts
-u, --unreach Show only unreachable hosts
-q, --quiet Quiet: don't show per-ping results
-s, --stats Print final stats
-e, --elapsed Show elapsed time on received packets
-A, --addr Show targets by address
-D, --timestamp Timestamp before each line
-J, --json JSON output (requires -c, -C or -l)
-4, --ipv4 Use IPv4 only
-6, --ipv6 Use IPv6 only
--report-all-rtts Show all individual RTTs
-x, --reachable <N> Minimum number of reachable hosts to be considered success
-S, --source <SOURCE> Source address for outgoing pings
-T, --tcp Use TCP ping instead of ICMP
--port <PORT> Port for TCP ping (default: 80) [default: 80]
--oiface <IFACE> Bind outgoing packets to this network interface (e.g. eth0)
--print-reply-dst Displays the destination address of the received reply packet
--tui Enable interactive TUI mode (ncurses)
-h, --help Print help
-V, --version Print version

Test

Run all tests

cargo test

Run special test

cargo test --test args_tests
cargo test --test dns_tests
cargo test --test output_tests
cargo test --test socket_tests
cargo test --test types_tests

Run specific test by name

cargo test --test types_tests loss_pct_50

Overview of the test files

FileDescriptionroot required
args_tests.rsCLI argument parsing, default valuesNo
dns_tests.rsHostname resolution, IP filteringNo*
output_tests.rssprint_tm, max_host_lenNo
socket_tests.rsPacket construction, checksum, ID/Seq encodingNo
types_tests.rsHostEntry logic, statisticsNo

* Network access is required for DNS resolution (localhost is always available).

Reference

About

High-performance ping tool fping-rust as an attempt to translate fping into Rust

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

fping-rust

githubRust CIDownloadsCrates.io

fping-rust is an attempt to port the fping program to Rust. It includes some features not found in the original fping, while others are missing.

This version is licensed under the GPL

Original

Original fping is a program to send ICMP echo probes to network hosts, similar to ping, but much better performing when pinging multiple hosts. fping has a long long story: Roland Schemers did publish a first version of it in 1992 and it has established itself since then as a standard tool.

Installation

Installation is quite simple and can be done directly from crates.io

cargo install fping-rust

Make fping either setuid, or, if under Linux

sudo setcap cap_net_raw,cap_net_admin+ep fping`

If you can't run fping as root or can't use the cap_net_raw capability, you can also run fping in unprivileged mode. This works on MacOS and also on Linux, provided that your GID is included in the range defined in /proc/sys/net/ipv4/ping_group_range. This is particularly useful for running fping-rust in rootless / unprivileged containers.

echo "net.ipv4.ping_group_range = 0 2147483647" >> /etc/sysctl.d/local.conf

Development

Build the project with Cargo in debug mode

make build

Run the tests using Cargo

make test

Build a release version of the project using Cargo

make build-release

Alternatively: Builds and packages the binaries

make package

Cleans up build artifacts

make clean

Usage

Fast ping to multiple hosts
Usage: fping [OPTIONS] [TARGETS]...
Arguments:
[TARGETS]... Target hosts
Options:
-c, --count <N> Count mode: send N pings to each target
-C, --vcount <N> Same as -c but verbose output (all RTTs)
-l, --loop Loop mode: send pings forever
-i, --interval <MSEC> Interval between packets in ms (default: 10) [default: 10]
-p, --period <MSEC> Per-host interval in ms (default: 1000) [default: 1000]
-t, --timeout <MSEC> Timeout in ms (default: 500) [default: 500]
-r, --retry <RETRY> Number of retries (default: 3) [default: 3]
-B, --backoff <BACKOFF> Exponential backoff factor (default: 1.5) [default: 1.5]
-b, --size <BYTES> Ping data size in bytes (default: 56) [default: 56]
-M, --dontfrag Set the Don't Fragment bit (PMTU discover)
--frag Allow fragmentation (explicitly disable Don't Fragment bit)
-f, --file <FILE> Read hosts from file (- = stdin)
-a, --alive Show only alive hosts
-u, --unreach Show only unreachable hosts
-q, --quiet Quiet: don't show per-ping results
-s, --stats Print final stats
-e, --elapsed Show elapsed time on received packets
-A, --addr Show targets by address
-D, --timestamp Timestamp before each line
-J, --json JSON output (requires -c, -C or -l)
-4, --ipv4 Use IPv4 only
-6, --ipv6 Use IPv6 only
--report-all-rtts Show all individual RTTs
-x, --reachable <N> Minimum number of reachable hosts to be considered success
-S, --source <SOURCE> Source address for outgoing pings
-T, --tcp Use TCP ping instead of ICMP
--port <PORT> Port for TCP ping (default: 80) [default: 80]
--oiface <IFACE> Bind outgoing packets to this network interface (e.g. eth0)
--print-reply-dst Displays the destination address of the received reply packet
--tui Enable interactive TUI mode (ncurses)
-h, --help Print help
-V, --version Print version

Test

Run all tests

cargo test

Run special test

cargo test --test args_tests
cargo test --test dns_tests
cargo test --test output_tests
cargo test --test socket_tests
cargo test --test types_tests

Run specific test by name

cargo test --test types_tests loss_pct_50

Overview of the test files

FileDescriptionroot required
args_tests.rsCLI argument parsing, default valuesNo
dns_tests.rsHostname resolution, IP filteringNo*
output_tests.rssprint_tm, max_host_lenNo
socket_tests.rsPacket construction, checksum, ID/Seq encodingNo
types_tests.rsHostEntry logic, statisticsNo

* Network access is required for DNS resolution (localhost is always available).

Reference

About

High-performance ping tool fping-rust as an attempt to translate fping into Rust

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

fping-rust

githubRust CIDownloadsCrates.io

fping-rust is an attempt to port the fping program to Rust. It includes some features not found in the original fping, while others are missing.

This version is licensed under the GPL

Original

Original fping is a program to send ICMP echo probes to network hosts, similar to ping, but much better performing when pinging multiple hosts. fping has a long long story: Roland Schemers did publish a first version of it in 1992 and it has established itself since then as a standard tool.

Installation

Installation is quite simple and can be done directly from crates.io

cargo install fping-rust

Make fping either setuid, or, if under Linux

sudo setcap cap_net_raw,cap_net_admin+ep fping`

If you can't run fping as root or can't use the cap_net_raw capability, you can also run fping in unprivileged mode. This works on MacOS and also on Linux, provided that your GID is included in the range defined in /proc/sys/net/ipv4/ping_group_range. This is particularly useful for running fping-rust in rootless / unprivileged containers.

echo "net.ipv4.ping_group_range = 0 2147483647" >> /etc/sysctl.d/local.conf

Development

Build the project with Cargo in debug mode

make build

Run the tests using Cargo

make test

Build a release version of the project using Cargo

make build-release

Alternatively: Builds and packages the binaries

make package

Cleans up build artifacts

make clean

Usage

Fast ping to multiple hosts
Usage: fping [OPTIONS] [TARGETS]...
Arguments:
[TARGETS]... Target hosts
Options:
-c, --count <N> Count mode: send N pings to each target
-C, --vcount <N> Same as -c but verbose output (all RTTs)
-l, --loop Loop mode: send pings forever
-i, --interval <MSEC> Interval between packets in ms (default: 10) [default: 10]
-p, --period <MSEC> Per-host interval in ms (default: 1000) [default: 1000]
-t, --timeout <MSEC> Timeout in ms (default: 500) [default: 500]
-r, --retry <RETRY> Number of retries (default: 3) [default: 3]
-B, --backoff <BACKOFF> Exponential backoff factor (default: 1.5) [default: 1.5]
-b, --size <BYTES> Ping data size in bytes (default: 56) [default: 56]
-M, --dontfrag Set the Don't Fragment bit (PMTU discover)
--frag Allow fragmentation (explicitly disable Don't Fragment bit)
-f, --file <FILE> Read hosts from file (- = stdin)
-a, --alive Show only alive hosts
-u, --unreach Show only unreachable hosts
-q, --quiet Quiet: don't show per-ping results
-s, --stats Print final stats
-e, --elapsed Show elapsed time on received packets
-A, --addr Show targets by address
-D, --timestamp Timestamp before each line
-J, --json JSON output (requires -c, -C or -l)
-4, --ipv4 Use IPv4 only
-6, --ipv6 Use IPv6 only
--report-all-rtts Show all individual RTTs
-x, --reachable <N> Minimum number of reachable hosts to be considered success
-S, --source <SOURCE> Source address for outgoing pings
-T, --tcp Use TCP ping instead of ICMP
--port <PORT> Port for TCP ping (default: 80) [default: 80]
--oiface <IFACE> Bind outgoing packets to this network interface (e.g. eth0)
--print-reply-dst Displays the destination address of the received reply packet
--tui Enable interactive TUI mode (ncurses)
-h, --help Print help
-V, --version Print version

Test

Run all tests

cargo test

Run special test

cargo test --test args_tests
cargo test --test dns_tests
cargo test --test output_tests
cargo test --test socket_tests
cargo test --test types_tests

Run specific test by name

cargo test --test types_tests loss_pct_50

Overview of the test files

FileDescriptionroot required
args_tests.rsCLI argument parsing, default valuesNo
dns_tests.rsHostname resolution, IP filteringNo*
output_tests.rssprint_tm, max_host_lenNo
socket_tests.rsPacket construction, checksum, ID/Seq encodingNo
types_tests.rsHostEntry logic, statisticsNo

* Network access is required for DNS resolution (localhost is always available).

Reference

About

High-performance ping tool fping-rust as an attempt to translate fping into Rust

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Universal Dark Mode - works on any site (function() { var enabled = true; function applyDarkMode() { if (!enabled) return; // Create style element if it doesn't exist var style = document.getElementById('universal-dark-mode-style'); if (!style) { style = document.createElement('style'); style.id = 'universal-dark-mode-style'; document.head.appendChild(style); } // Dark mode CSS - inverts colors but preserves images/video style.textContent = ' /* Invert everything except media */ html { filter: invert(1) hue-rotate(180deg) !important; background: #1a1a2e !important; } /* Restore images, videos, iframes, canvas */ img, video, iframe, canvas, svg, picture, [style*="background-image"] { filter: invert(1) hue-rotate(180deg) !important; } /* Preserve specific elements that should not be inverted */ .no-dark-mode, .no-dark-mode *, [data-theme="light"], [data-theme="light"], .ace_editor, .ace_editor *, .CodeMirror, .CodeMirror *, .monaco-editor, .monaco-editor *, .markdown-body pre, .markdown-body pre *, .highlight, .highlight *, pre code, pre code * { filter: none !important; } /* Fix common UI elements */ .modal, .popup, .dropdown-menu, .tooltip, .popover { filter: invert(1) hue-rotate(180deg) !important; background: #2d2d44 !important; border-color: #444 !important; } /* Scrollbars */ ::-webkit-scrollbar { background: #1a1a2e !important; } ::-webkit-scrollbar-thumb { background: #444 !important; } ::-webkit-scrollbar-thumb:hover { background: #555 !important; } /* Selection */ ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; } ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; } '; } function removeDarkMode() { var style = document.getElementById('universal-dark-mode-style'); if (style) style.remove(); } // Toggle with Alt+Shift+D document.addEventListener('keydown', function(e) { if (e.altKey && e.shiftKey && e.key === 'D') { e.preventDefault(); enabled = !enabled; if (enabled) { applyDarkMode(); console.log('[Universal Dark Mode] Enabled'); } else { removeDarkMode(); console.log('[Universal Dark Mode] Disabled'); } } }); // Apply on load applyDarkMode(); // Re-apply on dynamic content var observer = new MutationObserver(function(mutations) { if (enabled && !document.getElementById('universal-dark-mode-style')) { applyDarkMode(); } }); observer.observe(document.head, { childList: true }); console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle'); })(); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

fping-rust

githubRust CIDownloadsCrates.io

fping-rust is an attempt to port the fping program to Rust. It includes some features not found in the original fping, while others are missing.

This version is licensed under the GPL

Original

Original fping is a program to send ICMP echo probes to network hosts, similar to ping, but much better performing when pinging multiple hosts. fping has a long long story: Roland Schemers did publish a first version of it in 1992 and it has established itself since then as a standard tool.

Installation

Installation is quite simple and can be done directly from crates.io

cargo install fping-rust

Make fping either setuid, or, if under Linux

sudo setcap cap_net_raw,cap_net_admin+ep fping`

If you can't run fping as root or can't use the cap_net_raw capability, you can also run fping in unprivileged mode. This works on MacOS and also on Linux, provided that your GID is included in the range defined in /proc/sys/net/ipv4/ping_group_range. This is particularly useful for running fping-rust in rootless / unprivileged containers.

echo "net.ipv4.ping_group_range = 0 2147483647" >> /etc/sysctl.d/local.conf

Development

Build the project with Cargo in debug mode

make build

Run the tests using Cargo

make test

Build a release version of the project using Cargo

make build-release

Alternatively: Builds and packages the binaries

make package

Cleans up build artifacts

make clean

Usage

Fast ping to multiple hosts
Usage: fping [OPTIONS] [TARGETS]...
Arguments:
[TARGETS]... Target hosts
Options:
-c, --count <N> Count mode: send N pings to each target
-C, --vcount <N> Same as -c but verbose output (all RTTs)
-l, --loop Loop mode: send pings forever
-i, --interval <MSEC> Interval between packets in ms (default: 10) [default: 10]
-p, --period <MSEC> Per-host interval in ms (default: 1000) [default: 1000]
-t, --timeout <MSEC> Timeout in ms (default: 500) [default: 500]
-r, --retry <RETRY> Number of retries (default: 3) [default: 3]
-B, --backoff <BACKOFF> Exponential backoff factor (default: 1.5) [default: 1.5]
-b, --size <BYTES> Ping data size in bytes (default: 56) [default: 56]
-M, --dontfrag Set the Don't Fragment bit (PMTU discover)
--frag Allow fragmentation (explicitly disable Don't Fragment bit)
-f, --file <FILE> Read hosts from file (- = stdin)
-a, --alive Show only alive hosts
-u, --unreach Show only unreachable hosts
-q, --quiet Quiet: don't show per-ping results
-s, --stats Print final stats
-e, --elapsed Show elapsed time on received packets
-A, --addr Show targets by address
-D, --timestamp Timestamp before each line
-J, --json JSON output (requires -c, -C or -l)
-4, --ipv4 Use IPv4 only
-6, --ipv6 Use IPv6 only
--report-all-rtts Show all individual RTTs
-x, --reachable <N> Minimum number of reachable hosts to be considered success
-S, --source <SOURCE> Source address for outgoing pings
-T, --tcp Use TCP ping instead of ICMP
--port <PORT> Port for TCP ping (default: 80) [default: 80]
--oiface <IFACE> Bind outgoing packets to this network interface (e.g. eth0)
--print-reply-dst Displays the destination address of the received reply packet
--tui Enable interactive TUI mode (ncurses)
-h, --help Print help
-V, --version Print version

Test

Run all tests

cargo test

Run special test

cargo test --test args_tests
cargo test --test dns_tests
cargo test --test output_tests
cargo test --test socket_tests
cargo test --test types_tests

Run specific test by name

cargo test --test types_tests loss_pct_50

Overview of the test files

FileDescriptionroot required
args_tests.rsCLI argument parsing, default valuesNo
dns_tests.rsHostname resolution, IP filteringNo*
output_tests.rssprint_tm, max_host_lenNo
socket_tests.rsPacket construction, checksum, ID/Seq encodingNo
types_tests.rsHostEntry logic, statisticsNo

* Network access is required for DNS resolution (localhost is always available).

Reference

About

High-performance ping tool fping-rust as an attempt to translate fping into Rust

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages