https://github.com/jacopodl/spark
Low level network library :satellite: :zap:
https://github.com/jacopodl/spark
c low-level network network-programming networking raw raw-data raw-sockets spark
Last synced: 8 months ago
JSON representation
Low level network library :satellite: :zap:
- Host: GitHub
- URL: https://github.com/jacopodl/spark
- Owner: jacopodl
- License: mit
- Created: 2016-03-22T15:09:25.000Z (about 10 years ago)
- Default Branch: master
- Last Pushed: 2024-10-01T07:49:22.000Z (over 1 year ago)
- Last Synced: 2025-04-07T11:22:41.701Z (about 1 year ago)
- Topics: c, low-level, network, network-programming, networking, raw, raw-data, raw-sockets, spark
- Language: C
- Homepage:
- Size: 258 KB
- Stars: 3
- Watchers: 2
- Forks: 2
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README





# :zap: Spark :zap: #
Small and easy to use network library that support raw socket, pcap file and contains API to easily manipulate the main Internet protocols.
# How to use #
## Building library ##
Check out the latest version with:
$ git clone https://github.com/jacopodl/spark
or download .zip from [release]() page.
Now you can build library in this way: \
(Spark required cmake to automate build process, please install cmake first!)
$ cd spark
$ cmake .
$ make
If the build finishes without errors :tada:, the compiled library will be located in the bin directory and related header files will be located in include directory.
## Quick tour ##
### Packet sniffer ###
```C
unsigned char buf[4096];
struct SpkSock *rsock;
struct SpkPcap *mypcap;
struct SpkTimeStamp ts;
int err;
int len;
int max_packet = 1000;
if((err = spark_opensock("my-interface", sizeof(buf), &rsock)) < 0)
{
fprintf(stderr, "%s\n", spark_strerror(err));
return -1;
}
if((err = spark_pnew("my-pcap", SPKPCAP_SNAPLEN_DEFAULT, spark_getltype(rsock), &mypcap)) < 0)
{
fprintf(stderr, "%s\n", spark_strerror(err));
return -1;
}
while(max_packet-- > 0)
{
len = spark_read(rsock, buf, &ts);
spark_pwrite(mypcap, buf, len, &ts);
}
spark_close(rsock);
spark_pclose(mypcap);
```
### Polymorphic types ###
```C
void addr_printer(struct netaddr *addr)
{
if(NETADDR_CMP_TYPE((*addr), NA_TYPE_MAC))
printf("This is MAC address!\n");
else if(NETADDR_CMP_TYPE((*addr), NA_TYPE_IP))
printf("This is IPv4 address!\n");
else if (NETADDR_CMP_TYPE((*addr), NA_TYPE_IP6))
printf("This is IPv6 address!\n");
else
printf("Generic/unknown address!\n");
}
int main()
{
netaddr_mac(macaddr);
netaddr_ip(ipaddr);
addr_printer(&macaddr);
addr_printer(&ipaddr);
}
```
# License #
Made with :heartpulse: by JDL and released under MIT license.