OpENer는 I/O 어댑터 장치용 EtherNet/IP™ 스택입니다. 다중 I/O 및 명시적 연결을 지원합니다. ETHERNET/IP 사양에 정의되어 있고 ODVA(http://www.odva.org)에서 게시한 EtherNet/IP™ 호환 제품을 만들기 위한 객체와 서비스가 포함되어 있습니다.
OpENer의 사용자와 개발자는 각 Google 그룹에 가입하여 경험을 교환하고, OpENer의 사용법에 대해 논의하고, 커뮤니티에 유용할 새로운 기능과 CIP 객체를 제안할 수 있습니다.
개발자 메일링 리스트: https://groups.google.com/forum/#!forum/eip-stack-group-opener-developers
사용자 메일링 리스트: https://groups.google.com/forum/#!forum/eip-stack-group-opener-users
OpENer는 휴대성이 뛰어나도록 개발되었습니다. 기본 버전은 POSIX 운영 체제와 BSD 소켓 네트워크 인터페이스를 갖춘 PC를 대상으로 합니다. 이 버전을 테스트하려면 Cygwin(http://www.cygwin.com)이 설치된 Linux PC 또는 Windows를 권장합니다. 다음이 설치되어 있어야 합니다.
일반 건물의 경우. 이는 대부분의 Linux 설치에 설치되어야 하며 Cygwin 개발 패키지의 일부입니다.
단위 테스트를 실행하려면 https://github.com/cpputest/cpputest를 통해 CppUTest를 다운로드해야 합니다.
프로젝트를 구성하려면 CMake GUI(예: Linux의 cmake-gui 패키지 또는 CMake에서 사용 가능한 Windows용 설치 프로그램)를 사용하는 것이 좋습니다.
setup_posix.sh
호출하십시오. make
명령을 호출하십시오.
OpENer 호출:
./src/ports/POSIX/OpENer
예: ./src/ports/POSIX/OpENer eth1
또한 OpENer에는 이제 OpENer_RT 옵션을 통해 실시간 POSIX 시작이 가능하며, 이를 위해서는 사용된 커널에 전체 선점형 RT 패치가 적용되고 활성화되어야 합니다. OpENer_RT를 사용하려면 2단계 전에 sudo setcap cap_ipc_lock,cap_sys_nice+ep ./src/ports/POSIX/OpENer
실행하여 OpENer CAP_SYS_NICE
및 RT 모드에 필요한 CAP_IPC_LOCK
기능을 부여합니다.
CMake 플래그 -DOPENER_INSTALL_AS_LIB
를 설정하여 OpENer를 라이브러리로 빌드하고 설치할 수도 있습니다. 공유 라이브러리를 구축하려면 전역 옵션 -DBUILD_SHARED_LIBS=ON
도 설정해야 합니다. Linux/POSIX 플랫폼에서만 테스트되었습니다.
Build All
선택하여 OpENer 컴파일binwin32srcportsWIN32로 변경합니다.
Visual Studio에서 Debug
또는 Release
구성을 선택했는지에 따라 실행 파일이 디버그 또는 릴리스 하위 폴더에 표시됩니다.
다음을 통해 OpENer 호출
OpENer
예: OpENer 3
올바른 인터페이스 색인을 얻으려면 명령 프롬프트에 명령 route print
입력하고 출력 시작 부분에서 선택한 네트워크 인터페이스의 MAC 주소를 검색하세요. 가장 왼쪽의 숫자는 해당 인터페이스 인덱스입니다.
POSIX 설정 파일은 Cygwin에서 재사용할 수 있습니다. RT 모드를 사용할 수 없으며 Cygwin에서는 libcap을 사용할 수 없으므로 필요한 기능을 확인하고 가져오는 코드를 제거해야 합니다. Windows용 OpENer를 구축하는 더 쉽고 지원되는 방법은 MinGW 또는 Visual Studio를 사용하는 것입니다.
setup_mingw.bat
명령을 실행합니다. (Bash 쉘이 아닙니다). 추적을 원하는 경우 다음을 사용하거나(cmake 매개변수를 따옴표로 묶어야 함) ./source/CMakeList.txt 파일을 변경합니다. setup_mingw.bat "-DOpENer_TRACES:BOOL=TRUE"
OpENer의 기능에 대한 문서는 소스 코드의 일부입니다. 소스 패키지에는 doc/api_doc 디렉터리에 생성된 문서가 포함되어 있습니다. GIT 버전을 사용하는 경우 HTML 문서를 생성하려면 Doxygen 프로그램이 필요합니다. 오프너 기본 디렉터리의 명령줄에서 doxygen을 호출하여 문서를 생성할 수 있습니다.
퍼징은 출력을 모니터링하기 위해 다양한 입력 데이터를 프로그램에 전달하는 자동화된 테스트 방법입니다. 이는 전반적인 안정성을 테스트하고 잠재적인 보안 버그를 식별하는 방법입니다.
우리가 사용하고 있는 fuzzer는 런타임 안내 기술을 사용하여 테스트된 프로그램에 대한 입력을 생성하는 fuzzer인 AFL입니다. 높은 수준의 예측 AFL에서 다음과 같이 작동합니다.
이 프로젝트를 AFL로 퍼징하려면 AFL로 컴파일해야 합니다. 먼저 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)"
그런 다음 AFL을 사용하여 OpENer를 컴파일합니다.
OpENer/bin/posix
디렉터리로 변경합니다../setup_posix_fuzz_afl.sh
를 사용하여 OpENer 컴파일make
실행마지막으로 몇 가지 테스트 케이스를 생성하고 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
일반적으로 충돌을 재현하려면 cat testcase | nc IP_ADDR 44818
그러나 CIP는 EtherNet/IP 계층에서 실행되므로 먼저 유효한 세션을 등록해야 합니다. 따라서 전용 스크립트를 사용해야 합니다: python fuzz/scripts/send_testcase.py IP testcase_path
다음을 사용하여 생성한 네트워크를 확인하세요: docker network discover mac_vlan_network
네트워크는 도커 컨테이너에 IP를 할당하고 외부 스캐너가 이들과 통신할 수 있습니다. Docker 호스트 내부에서 컨테이너에 액세스하려면 브리지를 만들어야 합니다.
Dockerfile을 만듭니다. Ubuntu를 기본 이미지로 사용합니다. OpENer를 이미지 루트에 복사하고 필요한 패키지를 설치합니다. 마지막으로 이미지의 eth0에서 OpENer를 실행합니다. #Filename: Dockerfile FROM ubuntu:20.04 ADD ./bin/posix/src/ports/POSIX/OpENer / RUN apt-get update && apt-get install -y --no-install- libcap-dev nmap을 권장합니다. ENTRYPOINT ["./OpENer", "eth0"]
macvlan 네트워크를 컨테이너에 연결하고 쉽게 구축하고 해체할 수 있는 docker-compose.yml을 만듭니다. 버전: "3.3" 서비스: dockerimagename: network_mode: mac_vlan_network image: dockeruser/dockerimagename
실행 중인 컨테이너에 로그인하려면 dockerfile 및 dockercompose 파일에 포트를 노출하고 네트워크 브리지를 설정해야 합니다.
OpENer 컨테이너의 여러 인스턴스를 시작 및 중지하는 Docker 명령: 128개의 도커 이미지 인스턴스 시작: docker-compose up --scale dockerimagename=128 -d 모든 인스턴스 종료: docker-compose down
OpENer를 새로운 플랫폼으로 포팅하려면 Doxygen 문서의 포팅 섹션을 참조하세요.
가장 쉬운 방법은 저장소를 분기한 다음 기능/버그 수정 분기를 만드는 것입니다. 기능/버그 수정을 마친 후 끌어오기 요청을 작성하고 변경 사항을 설명하세요. 또한 제공된 코드 섹션에 doxygen 주석을 업데이트 및/또는 추가하세요. source/doc/coding_rules에 정의된 코딩 규칙을 따르세요. 들여쓰기 변환을 준수하는 가장 쉬운 방법은 OpENer 저장소에서 uncrustify를 git 필터로 설정하는 것입니다. 이 작업은 다음 명령을 사용하여 수행할 수 있습니다.
git config filter.uncrustify.clean "/path/to/uncrustify/uncrustify -c uncrustify.cfg --mtime --no-backup"
git config filter.uncrustify.smudge "cat"