{"id":22344037,"url":"https://github.com/jacopodl/spark","last_synced_at":"2025-10-14T18:31:47.532Z","repository":{"id":75614337,"uuid":"54484973","full_name":"jacopodl/Spark","owner":"jacopodl","description":"Low level network library :satellite: :zap:","archived":false,"fork":false,"pushed_at":"2024-10-01T07:49:22.000Z","size":264,"stargazers_count":3,"open_issues_count":0,"forks_count":2,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-04-07T11:22:41.701Z","etag":null,"topics":["c","low-level","network","network-programming","networking","raw","raw-data","raw-sockets","spark"],"latest_commit_sha":null,"homepage":"","language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/jacopodl.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2016-03-22T15:09:25.000Z","updated_at":"2024-10-01T07:49:26.000Z","dependencies_parsed_at":"2025-01-31T11:38:16.122Z","dependency_job_id":null,"html_url":"https://github.com/jacopodl/Spark","commit_stats":null,"previous_names":[],"tags_count":3,"template":false,"template_full_name":null,"purl":"pkg:github/jacopodl/Spark","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jacopodl%2FSpark","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jacopodl%2FSpark/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jacopodl%2FSpark/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jacopodl%2FSpark/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jacopodl","download_url":"https://codeload.github.com/jacopodl/Spark/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jacopodl%2FSpark/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":279020355,"owners_count":26086866,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-14T02:00:06.444Z","response_time":60,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["c","low-level","network","network-programming","networking","raw","raw-data","raw-sockets","spark"],"created_at":"2024-12-04T09:07:46.015Z","updated_at":"2025-10-14T18:31:47.525Z","avatar_url":"https://github.com/jacopodl.png","language":"C","funding_links":[],"categories":[],"sub_categories":[],"readme":"![](https://img.shields.io/badge/Language-C-orange.svg)\n![](https://img.shields.io/badge/version-3.0.0-green.svg)\n![](https://travis-ci.org/jacopodl/Spark.svg?branch=master)\n![MIT License](https://img.shields.io/badge/License-MIT-blue.svg)\n![](https://img.shields.io/badge/Supported%20Os-Linux%2FMac%20Os-red.svg)\n\n# :zap: Spark :zap: #\nSmall and easy to use network library that support raw socket, pcap file and contains API to easily manipulate the main Internet protocols.  \n\n# How to use #\n\n## Building library ##\nCheck out the latest version with:\n\n    $ git clone https://github.com/jacopodl/spark\n\nor download .zip from [release](\u003chttps://github.com/jacopodl/Spark/releases/\u003e) page.\n\nNow you can build library in this way:  \\\n(Spark required cmake to automate build process, please install cmake first!)\n\n    $ cd spark\n    $ cmake .\n    $ make\n\nIf 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.\n\n## Quick tour ##\n\n### Packet sniffer ###\n\n```C\nunsigned char buf[4096];\nstruct SpkSock *rsock;\nstruct SpkPcap *mypcap;\nstruct SpkTimeStamp ts;\n\nint err;\nint len;\nint max_packet = 1000;\n\nif((err = spark_opensock(\"my-interface\", sizeof(buf), \u0026rsock)) \u003c 0)\n{\n    fprintf(stderr, \"%s\\n\", spark_strerror(err));\n    return -1;\n}\n\nif((err = spark_pnew(\"my-pcap\", SPKPCAP_SNAPLEN_DEFAULT, spark_getltype(rsock), \u0026mypcap)) \u003c 0)\n{\n    fprintf(stderr, \"%s\\n\", spark_strerror(err));\n    return -1;\n}\n\nwhile(max_packet-- \u003e 0)\n{\n    len = spark_read(rsock, buf, \u0026ts);\n    spark_pwrite(mypcap, buf, len, \u0026ts);\n}\n\nspark_close(rsock);\nspark_pclose(mypcap);\n\n```\n\n### Polymorphic types ###\n\n```C\nvoid addr_printer(struct netaddr *addr)\n{\n    if(NETADDR_CMP_TYPE((*addr), NA_TYPE_MAC))\n        printf(\"This is MAC address!\\n\");\n    else if(NETADDR_CMP_TYPE((*addr), NA_TYPE_IP))\n        printf(\"This is IPv4 address!\\n\");\n    else if (NETADDR_CMP_TYPE((*addr), NA_TYPE_IP6))\n        printf(\"This is IPv6 address!\\n\");\n    else\n        printf(\"Generic/unknown address!\\n\");\n}\n\nint main()\n{\n    netaddr_mac(macaddr);\n    netaddr_ip(ipaddr);\n    \n    addr_printer(\u0026macaddr);\n    addr_printer(\u0026ipaddr);\n}\n\n```\n\n# License #\nMade with :heartpulse: by \u003cb\u003eJDL\u003c/b\u003e and released under \u003cb\u003eMIT license\u003c/b\u003e.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjacopodl%2Fspark","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjacopodl%2Fspark","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjacopodl%2Fspark/lists"}