OpENer adalah tumpukan EtherNet/IP™ untuk perangkat adaptor I/O; mendukung banyak I/O dan koneksi eksplisit; mencakup objek dan layanan untuk membuat produk yang sesuai dengan EtherNet/IP™ yang ditentukan dalam SPESIFIKASI ETHERNET/IP dan diterbitkan oleh ODVA (http://www.odva.org).
Pengguna dan pengembang OpENer dapat bergabung dengan Grup Google masing-masing untuk bertukar pengalaman, mendiskusikan penggunaan OpENer, dan menyarankan fitur baru dan objek CIP, yang akan berguna bagi komunitas.
Milis pengembang: https://groups.google.com/forum/#!forum/eip-stack-group-opener-developers
Milis pengguna: https://groups.google.com/forum/#!forum/eip-stack-group-opener-users
OpENer telah dikembangkan menjadi sangat portabel. Versi default menargetkan PC dengan sistem operasi POSIX dan antarmuka jaringan soket BSD. Untuk menguji versi ini kami merekomendasikan PC Linux atau Windows dengan Cygwin (http://www.cygwin.com) terinstal. Anda harus menginstal yang berikut ini:
untuk bangunan biasa. Ini harus diinstal pada sebagian besar instalasi Linux dan merupakan bagian dari paket pengembangan Cygwin.
Jika Anda ingin menjalankan pengujian unit, Anda juga harus mengunduh CppUTest melalui https://github.com/cpputest/cpputest
Untuk mengonfigurasi proyek kami merekomendasikan penggunaan GUI CMake (misalnya, paket cmake-gui di Linux, atau Penginstal untuk Windows yang tersedia di CMake)
setup_posix.sh
Jalankan perintah make
Memanggil Pembuka:
./src/ports/POSIX/OpENer
misalnya ./src/ports/POSIX/OpENer eth1
OpENer juga sekarang memiliki startup POSIX yang mampu real-time melalui opsi OpENer_RT, yang mengharuskan kernel yang digunakan menerapkan dan mengaktifkan patch RT preemptive penuh. Jika Anda ingin menggunakan OpENer_RT, sebelum langkah 2, jalankan sudo setcap cap_ipc_lock,cap_sys_nice+ep ./src/ports/POSIX/OpENer
untuk memberikan OpENEr CAP_SYS_NICE
, dan kemampuan CAP_IPC_LOCK
, yang diperlukan untuk mode RT
OpENer juga dapat dibangun dan diinstal sebagai perpustakaan dengan menyetel flag CMake -DOPENER_INSTALL_AS_LIB
. Untuk membangun perpustakaan bersama, opsi global -DBUILD_SHARED_LIBS=ON
juga harus disetel. Ini hanya diuji pada platform Linux/POSIX.
Build All
di Visual StudioUbah ke binwin32srcportsWIN32
Bergantung pada apakah Anda memilih konfigurasi Debug
atau Release
di Visual Studio, file executable Anda akan muncul di subfolder Debug atau Rilis
Panggil Opener melalui
OpENer
misalnya OpENer 3
Untuk mendapatkan indeks antarmuka yang benar, masukkan perintah route print
di perintah promt dan cari alamat MAC antarmuka jaringan pilihan Anda di awal keluaran. Angka paling kiri adalah indeks antarmuka yang sesuai.
File setup POSIX dapat digunakan kembali untuk Cygwin. Harap dicatat, bahwa Anda tidak dapat menggunakan mode RT dan Anda harus menghapus kode yang bertanggung jawab untuk memeriksa dan mendapatkan kemampuan yang diperlukan, karena libcap tidak tersedia di Cygwin. Cara yang lebih mudah dan didukung untuk membangun Opener untuk Windows adalah dengan menggunakan MinGW atau Visual Studio.
setup_mingw.bat
di baris perintah dos. (Bukan cangkang bash). Jika penelusuran diinginkan, gunakan yang berikut (parameter cmake harus diapit tanda kutip) atau ubah file ./source/CMakeList.txt. setup_mingw.bat "-DOpENer_TRACES:BOOL=TRUE"
Dokumentasi fungsi Opener adalah bagian dari kode sumber. Paket sumber berisi dokumentasi yang dihasilkan di direktori doc/api_doc. Jika Anda menggunakan versi GIT, Anda memerlukan program Doxygen untuk membuat dokumentasi HTML. Anda dapat membuat dokumentasi dengan menjalankan doxygen dari baris perintah di direktori utama pembuka.
Fuzzing adalah metode pengujian otomatis yang mengarahkan berbagai data masukan ke suatu program untuk memantau keluaran. Ini adalah cara untuk menguji keandalan secara keseluruhan serta mengidentifikasi potensi bug keamanan.
Fuzzer yang kami gunakan adalah AFL, fuzzer yang menggunakan teknik panduan runtime untuk membuat masukan bagi program yang diuji. Dari perspektif tingkat tinggi, AFL berfungsi sebagai berikut:
Untuk memulai fuzzing proyek ini dengan AFL, Anda harus mengkompilasinya dengan AFL. Pertama pastikan Anda telah menginstal AFL:
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)"
Kemudian, kompilasi OpENer dengan AFL:
OpENer/bin/posix
./setup_posix_fuzz_afl.sh
make
Terakhir, buat beberapa kasus uji dan mulai 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
Biasanya untuk mereproduksi crash, cukup mengirimkan ulang testcase menggunakan cat testcase | nc IP_ADDR 44818
Namun, karena CIP berjalan di atas lapisan EtherNet/IP, ia harus mendaftarkan sesi yang valid terlebih dahulu. Oleh karena itu, kita perlu menggunakan skrip khusus: python fuzz/scripts/send_testcase.py IP testcase_path
Periksa jaringan yang Anda buat dengan: jaringan buruh pelabuhan periksa mac_vlan_network
Jaringan akan menetapkan IP ke kontainer buruh pelabuhan dan pemindai eksternal akan dapat berkomunikasi dengan mereka. Untuk mengakses container dari dalam host buruh pelabuhan, Anda harus membuat jembatan.
Buat file Docker. Ini menggunakan Ubuntu sebagai gambar dasar. Ini akan menyalin Opener ke root image dan menginstal paket yang diperlukan. Terakhir jalankan OpENer pada eth0 gambar: #Filename: Dockerfile FROM ubuntu:20.04 ADD ./bin/posix/src/ports/POSIX/OpENer / RUN apt-get update && apt-get install -y --no-install- merekomendasikan libcap-dev nmap ENTRYPOINT ["./OpENer", "eth0"]
Buat docker-compose.yml yang memungkinkan Anda menghubungkan jaringan macvlan ke container dan dengan mudah membangun dan menghancurkannya: versi: "3.3" layanan: dockerimagename: network_mode: mac_vlan_network image: dockeruser/dockerimagename
Perhatikan bahwa untuk masuk ke container yang sedang berjalan, Anda harus mengekspos port di file dockerfile dan dockercompose serta menyiapkan jembatan jaringan.
Perintah Docker untuk memulai dan menghentikan beberapa instance container OpENer: Memulai 128 instance image buruh pelabuhan: docker-compose up --scale dockerimagename=128 -d Matikan semua instance: docker-compose down
Untuk mem-porting OpENer ke platform baru, silakan lihat bagian porting di dokumentasi Doxygen.
Cara termudah adalah dengan melakukan fork pada repositori, lalu membuat cabang fitur/perbaikan bug. Setelah menyelesaikan fitur/perbaikan bug Anda, buat permintaan penarikan dan jelaskan perubahan Anda. Selain itu, harap perbarui dan/atau tambahkan komentar doxygen ke bagian kode yang disediakan. Harap tetap berpegang pada konvensi pengkodean, sebagaimana didefinisikan dalam source/doc/coding_rules. Cara termudah untuk menyesuaikan diri dengan konversi indentasi adalah dengan menyetel uncrustify sebagai git filter di repositori Opener, yang dapat dilakukan dengan perintah berikut:
git config filter.uncrustify.clean "/path/to/uncrustify/uncrustify -c uncrustify.cfg --mtime --no-backup"
git config filter.uncrustify.smudge "cat"