modbus 서버 (slave)
https://www.dropbox.com/s/lstf39hbnsymizr/ModbusPal.jar?dl=
해당 링크를 통해 modbuspal 설치파일을 다운로드 받는다
다운받은 jar 파일을 설치를 한다
설치가 완료가 되면 다음과 같은 modbuspal 모습을 확인할수 있다.
이 프로그램은 슬레이브 역할 즉 modbus 서버이다.
클라이언트에서 서버로 연결해주는 프로그램은 매우 다양하다
modbus slaves 라는 칸이 있는데 그곳은 하나의 장비들모임이라고 생각하면 된다.
slave를 일단 한개만 추가를 해본다.
생성한 machine은 A machine이라는 이름을 지어줬다.
외부에서 입력이 들어오면 A machine 슬레이브를 거쳐서 입력에 대한 데이터에 실행을 할것이다.
눈 모양을 누르면 [그림 4]를 확인할 수 있다.
레지스터 정보와 코일 정보를 확인 할수 있다.
레지스터를 총 5개를 생성한다.
생성 된 레지스터는 모두 0의 값(value)을 갖고 있다.
Value값이 최대 65535까지 생성이 가능하다
코일 생성 또한 총 5개를 생성해 보았다.
코일의 경우 Value는 1 과 0 만 된다.
이제 run 버튼을 통해 실행을 이어간다.
nmap을 통해 modbus 포트가 실행 된것을 확인할 수 있다.
modbus 클라이언트(master)
이전에도 설명했듯이 모드버스 클라이언트 프로그램은 종류가 매우 많다.
실습은 Qmodmaster 프로그램을 이용할 것이다.
https://www.dropbox.com/s/dfr3evmgaheipva/qModMaster.zip?dl=0
설치가완료 되면 [그림12]와 같은 화면을 확인할 수 있다.
우측 위쪽에 (빨간색 밑줄) 버튼을 눌러서 서버 ip 설정을 해둔다
서버 ip에 기본 포트인 502로 하고 ok버튼을 누른다.
전기 콘센트 버튼 (빨간색 밑줄)을 눌러서 설정해둔 ip와 연결을 한다
좌측 아래에 tcp: 192.168.180.147 이라고 써져있는 부분 좌측에 캡쳐화면처럼 빨간색이면 연결이 안된거고 초록색이면 연결이 된것이다.
function code는 01 read coils 로 했다.
start address는 0인데 이것은 인덱스 번호이기 때문에 0부터 시작하는것이 맞다.
number of coils는 10으로 했었는데 서버 세팅할때 코일은 5개만 만들어놔서 5로 다시 설정해둔다
= 코일의 원래 갯수보다 적게는 괜찮지만 그보다 많은 상태로 하면 에러가 난다.
가운데쯤에 모니터 버튼(노란색 하이라이트)를 누르면 패킷을 주고 받을때마다 패킷에 관한 내용들을 모니터링 할수 있다
연결버튼 우측에 (빨간색 밑줄)을 누르면 설정해둔 내용들이 실행이 되어 결과물을 확인 할수 있다
unction code가 1로 read 이고 0번째 어드레스부터 5번까지 확인 한것을 확인 할수 있다
이번에는 function code 를 05로 write 으로 해볼것 이다.
이전 실습에서 read를 통해 00100이라는것을 알아 냈다
start address를 3으로 설정을 해서 4번 address 내용을 0이 아닌 1로 바꿀것이다( 0 부터 시작이었으니까)
아래 화면에는 4번 address 내용인 0 만 뜨는데 해당 값을 1로 바꾼다.
그리고 read/write 버튼(빨간색 밑줄)을 누르면 내용이 갱신이 된다.
4번 address가 1로 바뀐것을 확인 할수 있다.
function code:05 Starting Address:0003 Output Value 0000 을 확인 할수 있다.
이전 까지 실습은 write 따로 read 따로따로 할 수 있었다면
조회와 수정을 한번에 할수 있는 function code가 있다.
write multiple coil(0x010) 이다
손 쉽게 조회와 갱신을 바로 할 수 있다
'보안 > 산업 제어' 카테고리의 다른 글
Osint를 통한 ICS 실습 (0) | 2024.02.19 |
---|---|
산업제어 시스템 프로토콜 modbus 분석 (0) | 2024.01.26 |
산업제어 시스템 이란 (0) | 2024.01.25 |