github.com/robacarp/icmp.cr

A terse implementation of ICMP Ping in Crystal

11 stars
1 dependent
License: MIT

Nothing has been indexed for 0.1.0 yet. The tag is recorded, its shard.yml has not been read, so the manifest and dependency list below are empty because they are unknown rather than because they are absent.

Installation

# Add this to your shard.yml
dependencies:
  icmp:
    github: robacarp/icmp.cr
    version: ~> 0.1.0

Then run:

shards install

shard.yml

No shard.yml has been indexed for 0.1.0. You can read it on the repository.

Dependencies

Unknown: the shard.yml for this version has not been read yet.

README

This README is the one indexed from the repository at its latest ref, not from the tag for this version.

Crystal Version

icmp.cr

A terse implementation of ICMP Ping in Crystal.

Installation

Add this to your application's shard.yml:

dependencies:
  icmp:
    github: robacarp/icmp.cr

Usage

require "icmp"

statistics = ICMP::Ping.new("8.8.8.8").ping(count: 3) do |request|
  puts "#{request.sequence} #{request.status} took #{request.roundtrip_time}ms"
end
p statistics

Outputs:

0 valid_response took 30ms
1 valid_response took 29ms
2 valid_response took 29ms
{count: 3, success: 3, fail: 0, average_response: 29.333333333333332}

Permissions

On linux, this ping implementation uses a raw IP socket, which can run into some permission issues. After compiling, if you run into the error message failed to create socket:: Operation not permitted (Errno), the kernel is probably blocking you.

To get around this, either run as root/sudo, or use setcap to award cap_net_raw to your executable.

You can do this with setcap cap_net_raw=ep <executable-name>.

See man 7 capabilities and man 8 setcap for more information.

Thanks to @jocata and @duraki for helping here.

Contributing

Contributions are welcome. Please fork the repository, commit changes on a branch, and then open a pull request.