All Projects → EIPStackGroup → Opener

EIPStackGroup / Opener

Licence: other
OpENer is an EtherNet/IP stack for I/O adapter devices. It supports multiple I/O and explicit connections and includes objects and services for making EtherNet/IP-compliant products as defined in the ODVA specification.

Programming Languages

c
50402 projects - #5 most used programming language

Labels

Projects that are alternatives of or similar to Opener

WIZ750SR
WIZnet Serial to Ethernet(S2E) module based on W7500 chip, WIZ107/108SR S2E compatible device
Stars: ✭ 13 (-96.37%)
Mutual labels:  ethernet
network-pipeline
Network traffic data pipeline for real-time predictions and building datasets for deep neural networks
Stars: ✭ 36 (-89.94%)
Mutual labels:  ethernet
esp32-f9p-io-board
An IO-PCB (two motor-driver/H-bridge, CAN, RS232, ADS1115, relay, ethernet, ardusimple f9p compatible connector) with an ESP32 for 12V power, three 15V tolerant analog inputs, three 5V tolerant inputs.
Stars: ✭ 24 (-93.3%)
Mutual labels:  ethernet
avdecc
A set of open source libraries for controlling AVB entities using the AVDECC (IEEE 1722.1) protocol compliant to Avnu Milan Specifications
Stars: ✭ 67 (-81.28%)
Mutual labels:  ethernet
rp-network-testers
Kootnet Network Testers - Network Testing Software
Stars: ✭ 29 (-91.9%)
Mutual labels:  ethernet
EthernetWebServer
This is simple yet complete WebServer library for AVR, Portenta_H7, Teensy, SAM DUE, SAMD21/SAMD51, nRF52, STM32, RP2040-based, etc. boards running Ethernet shields. The functions are similar and compatible to ESP8266/ESP32 WebServer libraries to make life much easier to port sketches from ESP8266/ESP32. Coexisting now with `ESP32 WebServer` and…
Stars: ✭ 118 (-67.04%)
Mutual labels:  ethernet
throwing-star-lan-tap
A passive tap for monitoring 10/100 Ethernet.
Stars: ✭ 88 (-75.42%)
Mutual labels:  ethernet
Libplctag
This C library provides a portable and simple API for accessing Allen-Bradley and Modbus PLC data over Ethernet.
Stars: ✭ 314 (-12.29%)
Mutual labels:  ethernet
easy-connect
DEPRECATED: Easily add all supported connectivity methods to your mbed OS project
Stars: ✭ 14 (-96.09%)
Mutual labels:  ethernet
SinricPro Generic
Simple way to control your IOT development boards like ESP8226, ESP32, Arduino SAMD21, Adafruit SAMD21, SAMD51, nRF52, STM32, Teensy, SAM DUE with Amazon Alexa or Google Home
Stars: ✭ 18 (-94.97%)
Mutual labels:  ethernet
dumb
Dumb User Mode Bridge
Stars: ✭ 20 (-94.41%)
Mutual labels:  ethernet
MySQL MariaDB Generic
This MySQL_MariaDB_Generic library helps you connect your boards directly to a MySQL / MariaDB server, either local or cloud-based, so that you can store / retrieve data to / from the server. Supported boards are ESP8266/ESP32, WT32_ETH01 (ESP32 + LAN8720A), nRF52, SAMD21/SAMD51, STM32F/L/H/G/WB/MP1, Teensy, SAM DUE, Mega, RP2040-based boards, P…
Stars: ✭ 35 (-90.22%)
Mutual labels:  ethernet
pps-gen-gpio
Linux kernel PPS generator using GPIO pins
Stars: ✭ 25 (-93.02%)
Mutual labels:  ethernet
CoRE4INET
CoRE4INET is an extension to the INET-Framework for the event-based simulation of real-time Ethernet in the OMNEST/OMNeT++ simulation system.
Stars: ✭ 39 (-89.11%)
Mutual labels:  ethernet
Mirage Tcpip
TCP/IP networking stack in pure OCaml, using the Mirage platform libraries. Includes IPv4/6, ICMP, and UDP/TCP support.
Stars: ✭ 277 (-22.63%)
Mutual labels:  ethernet
ethtool
Package ethtool allows control of the Linux ethtool generic netlink interface. MIT Licensed.
Stars: ✭ 47 (-86.87%)
Mutual labels:  ethernet
RF24Ethernet
OSI Layers 4&5 Wireless (not WiFi) TCP/IP networking on Arduino devices using nrf24l01+ radios
Stars: ✭ 97 (-72.91%)
Mutual labels:  ethernet
Esp At
AT application for ESP32 ESP-IDF & ESP32S2 ESP-IDF & ESP8266 ESP8266_RTOS_SDK
Stars: ✭ 319 (-10.89%)
Mutual labels:  ethernet
Harvesters
🌈 Friendly Image Acquisition Library for Computer Vision People
Stars: ✭ 274 (-23.46%)
Mutual labels:  ethernet
ESP-Mail-Client
⚡️Arduino Mail Client Library to send, read and get incoming mail notification for ESP32, ESP8266 and SAMD21 devices. The library also supported other Arduino devices using Clients interfaces e.g. WiFiClient, EthernetClient, and GSMClient.
Stars: ✭ 78 (-78.21%)
Mutual labels:  ethernet

Build Status Coverity Scan Build Status Quality Gate Join the chat at https://gitter.im/EIPStackGroupOpENer/Lobby

OpENer Version 2.1.0

Welcome to OpENer!

OpENer is an EtherNet/IP™ stack for I/O adapter devices; supports multiple I/O and explicit connections; includes objects and services to make EtherNet/IP™- compliant products defined in THE ETHERNET/IP SPECIFICATION and published by ODVA (http://www.odva.org).

Participate!

Users and developers of OpENer can join the respective Google Groups in order to exchange experience, discuss the usage of OpENer, and to suggest new features and CIP objects, which would be useful for the community.

Developers mailing list: https://groups.google.com/forum/#!forum/eip-stack-group-opener-developers

Users mailing list: https://groups.google.com/forum/#!forum/eip-stack-group-opener-users

Requirements:

OpENer has been developed to be highly portable. The default version targets PCs with a POSIX operating system and a BSD-socket network interface. To test this version we recommend a Linux PC or Windows with Cygwin (http://www.cygwin.com) installed. You will need to have the following installed:

  • CMake
  • gcc
  • make
  • binutils
  • the development library of libcap (libcap-dev or equivalient)

for normal building. These should be installed on most Linux installations and are part of the development packages of Cygwin.

If you want to run the unit tests you will also have to download CppUTest via https://github.com/cpputest/cpputest

For configuring the project we recommend the use of a CMake GUI (e.g., the cmake-gui package on Linux, or the Installer for Windows available at CMake)

Compile for Linux/POSIX:

  1. Make sure all the needed tools are available (CMake, make, gcc, binutils)
  2. Change to the /bin/posix
  3. For a standard configuration invoke setup_posix.sh
    1. Invoke the make command

    2. Grant OpENer the right to use raw sockets via sudo setcap cap_net_raw+ep ./src/ports/POSIX/OpENer

    3. Invoking OpENer:

      ./src/ports/POSIX/OpENer <interface_name>

      e.g. ./src/ports/POSIX/OpENer eth1

OpENer also now has a real-time capable POSIX startup via the OpENer_RT option, which requires that the used kernel has the full preemptive RT patches applied and activated. If you want to use OpENer_RT, instead of step 2, the sudo setcap cap_net_raw,cap_ipc_lock,cap_sys_nice+ep ./src/ports/POSIX/OpENer has to be run to grant OpENEr CAP_SYS_NICE, CAP_IPC_LOCK, and the CAP_NET_RAW capabilities, needed for the RT mode

Shared library support has been added to CMakeLists file and is enabled by setting OPENER_BUILD_SHARED_LIBS=ON. It has only been tested under Linux/POSIX platform.

Compile for Windows XP/7/8 via Visual Studio:

  1. Invoke setup_windows.bat or configure via CMake
  2. Open Visual Studio solution OpENer.sln in bin/win32
  3. Compile OpENer by chosing Build All in Visual Studio
  4. For invoking OpENer type from the command line:
    1. Change to \bin\win32\src\ports\WIN32\

    2. Depending if you chose the Debug or Release configuration in Visual Studio, your executable will either show up in the subfolder Debug or Release

    3. Invoke OpENer via

      OpENer <interface_index>

      e.g. OpENer 3

In order to get the correct interface index enter the command route print in a command promt and search for the MAC address of your chosen network interface at the beginning of the output. The leftmost number is the corresponding interface index.

Compile for Windows XP/7/8/10 via Cygwin:

The POSIX setup file can be reused for Cygwin. Please note, that you cannot use RT mode and you will have to remove the code responsible for checking and getting the needed capabilities, as libcap is not available in Cygwin. The easier and more supported way to build OpENer for Windows is to either use MinGW or Visual Studio.

In order to run OpENer, it has to be run as privileged process, as it needs the rights to use raw sockets.

Compile for MinGW on Windows XP/7/8/10

  1. Make sure 64 bit mingw is installed. (Test with gcc --version, should show x86_64-posix-seh-rev1)
  2. Make sure CMake is installed. (Test with cmake --version, should be version 3.xx)
  3. Change to /bin/mingw
  4. Run the command setup_mingw.bat in a dos command line. (Not a bash shell). If tracing is desired, use the following (where the cmake parameter must be enclosed in quotes) or change the ./source/CMakeList.txt file.
    setup_mingw.bat "-DOpENer_TRACES:BOOL=TRUE"
    
  5. Run the command "make" from the same directory (./bin/mingw)
  6. The opener.exe is now found in \bin\mingw\src\ports\MINGW
  7. Start it like this: "opener 192.168.250.22", where the ip address is the local computer's address on the nettwork you want to use.

Directory structure:

  • bin ... The resulting binaries and make files for different ports
  • doc ... Doxygen generated documentation (has to be generated for the SVN version) and Coding rules
  • data ... EDS file for the default application
  • source
    • src ... the production source code
      • cip ... the CIP layer of the stack
      • cip_objects ... additional CIP objects
      • enet_encap ... the Ethernet encapsulation layer
      • ports ... the platform specific code
      • utils ... utility functions
    • tests ... the test source code
      • enet_encap ... tests for Ethernet encapsulation layer
      • utils ... tests for utility functions

Documentation:

The documentation of the functions of OpENer is part of the source code. The source packages contain the generated documentation in the directory doc/api_doc. If you use the GIT version you will need the program Doxygen for generating the HTML documentation. You can generate the documentation by invoking doxygen from the command line in the opener main directory.

Fuzzing

Intro

Fuzzing is an automated testing method that directs varying input data to a program in order to monitor output. It is a way to test for overall reliability as well as identify potential security bugs.

The fuzzer we are using is AFL, a fuzzer that uses runtime guided techniques to create input for the tested program. From a high-level prespective AFL works as follows:

  • Forks the fuzzed process
  • Genereates a new test case based on a predefined input
  • Feeds the fuzzed process with the test case through STDIN
  • Monitors the execution and registers which paths are reachable

Alt text

Compile

To start fuzzing this project with AFL you'll need to compile it with AFL. First make sure you have AFL installed:

sudo apt install build-essential
wget http://lcamtuf.coredump.cx/afl/releases/afl-latest.tgz
tar xzf afl-latest.tgz
cd afl*
make && sudo make install
echo "AFL is ready at: $(which afl-fuzz)"

Then, compile OpENer with AFL:

  1. Change to the OpENer/bin/posix directory
  2. Compile OpENer with AFL ./setup_posix_fuzz_afl.sh
  3. Run make

Fuzz

Finally, generate some test cases and start AFL:

# Generate inputs
mkdir inputs
echo 630000000000000000000000000000000000000000000000 | xxd -r -p > ./inputs/enip_req_list_identity
# You can also use the inputs we prepared from OpENer/fuzz/inputs
# Finally, let's fuzz!
afl-fuzz -i inputs -o findings ./src/ports/POSIX/OpENer <interface_name>

Reproduce a crash

Usually to reproduce a crash it's enough to retransmit the testcase using cat testcase | nc IP_ADDR 44818 However, since CIP runs over the EtherNet/IP layer, it must first register a valid session. Therefore, we need to use a dedicated script: python fuzz/scripts/send_testcase.py IP testcase_path

Porting OpENer:

For porting OpENer to new platforms please see the porting section in the Doxygen documentation.

Contributing to OpENer:

The easiest way is to fork the repository, then create a feature/bugfix branch. After finishing your feature/bugfix create a pull request and explain your changes. Also, please update and/or add doxygen comments to the provided code sections. Please stick to the coding conventions, as defined in source/doc/coding_rules The easiest way to conform to the indenting convertion is to set uncrustify as git filter in the OpENer repository, which can be done with the following to commands:

git config filter.uncrustify.clean "/path/to/uncrustify/uncrustify -c uncrustify.cfg --mtime --no-backup"

git config filter.uncrustify.smudge "cat"
Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].