Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/markondej/cpp-icmplib
A C++ header-only ICMP Ping library
https://github.com/markondej/cpp-icmplib
Last synced: 8 days ago
JSON representation
A C++ header-only ICMP Ping library
- Host: GitHub
- URL: https://github.com/markondej/cpp-icmplib
- Owner: markondej
- License: other
- Created: 2021-07-31T23:33:12.000Z (over 3 years ago)
- Default Branch: master
- Last Pushed: 2024-01-02T17:22:40.000Z (11 months ago)
- Last Synced: 2024-03-13T17:33:37.663Z (8 months ago)
- Language: C++
- Homepage:
- Size: 58.6 KB
- Stars: 20
- Watchers: 4
- Forks: 6
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# A C++ header-only ICMP/ICMPv6 Ping library
cpp-icmplib is simple header-only cross-platform library, which allows performing system-like ping requests from C++ applications without need of using system "ping" command.
As this library is socket-based, on most operating systems, it will require administrator privilages (root) to run.## How to use
icmplib delivers function Ping declared as:
```
PingResult Ping(const icmplib::AddressIP &target, unsigned timeout = 1000, uint16_t sequence = 1, uint8_t ttl = 255);
```
Notice:
* target - Network address (may be created from std::string)
* timeout - Timeout in milliseconds
* sequence - Sequence number to be sent
* ttl - Time-to-live to be set for packetPingResult structure is declared as:
```
struct PingResult {
enum class ResponseType {
Success,
Unreachable,
TimeExceeded,
Timeout,
Unsupported,
Failure
} response;
double delay;
icmplib::AddressIP address;
uint8_t code;
uint8_t ttl;
};
```
Notice:
* delay - Time in miliseconds between sending request and receiving response
* address - Address of responding host
* code - ICMP Code parameter
* ttl - Received IPv4 header TTL parameter
* response - Type of received response```
ResponseType | Meaning
--------------------------------------------------------------------------------------------------------
Success | ICMP Echo Response successfully received
Unreachable | ICMP Destination Ureachable message received (eg. target host does not exist)
TimeExceeded | ICMP Time Exceeded message received (eg. TTL meet zero value on some host)
Timeout | No message recived in given time (see "timeout" parameter)
Unsupported | Received unsupported ICMP packet
Failure | Failed to send ICMP Echo Request to given target host
```## Examples
In order to make internet connection test simply use:
```
#include "icmplib.h"...
bool isConnected()
{
return icmplib::Ping("8.8.8.8", ICMPLIB_TIMEOUT_1S).response == icmplib::PingResponseType::Success; // Test Google DNS address
}
```Simple traceroute implementation:
```
#include "icmplib.h"
#include
...std::vector traceroute(const std::string &address)
{
std::vector result;
for (uint8_t ttl = 1; ttl != 0; ttl++) {
auto ping = icmplib::Ping(address, ICMPLIB_TIMEOUT_1S, 1, ttl);
switch (ping.response) {
case icmplib::PingResult::ResponseType::TimeExceeded:
result.push_back(ping.address.ToString());
break;
case icmplib::PingResult::ResponseType::Success:
result.push_back(ping.address.ToString());
return result;
default:
return result;
}
}
return result;
}
```## Known issues
On Windows 10 ICMP messages other than Echo Response seem to be blocked and, while being received, are not passed to application via socket, timeout is detected instead