Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/bin/bash
- set -euo pipefail
- # Send PLC commands AND show ACK NAK
- HOST="192.168.1.50"
- TCP_PORT=2101
- DELAY=0.15
- RX_TIMEOUT=0.5
- RX_MAX_BYTES=64
- read_response() {
- local data
- data=$(timeout "$RX_TIMEOUT" dd bs=1 count="$RX_MAX_BYTES" <&3 2>/dev/null | xxd -p -c 256 || true)
- if [[ -z "$data" ]]; then
- echo "[RX] <timeout/no response>"
- return
- fi
- printf '[RX HEX] '
- echo "$data" | sed 's/../& /g'
- case "$data" in
- 06*)
- echo "[RX] ACK"
- ;;
- 15*)
- echo "[RX] NAK"
- ;;
- *)
- printf '[RX ASCII] '
- echo "$data" | xxd -r -p | sed -n 'l'
- ;;
- esac
- }
- send_frame() {
- local frame="$1"
- printf '[TX] '
- printf '%b' "$frame" | xxd -p -c 256 | sed 's/../& /g'
- printf '%b' "$frame" >&3
- read_response
- sleep "$DELAY"
- }
- echo "[*] Connecting to ${HOST}:${TCP_PORT} ..."
- exec 3<>"/dev/tcp/${HOST}/${TCP_PORT}"
- echo "[*] ON sequence"
- send_frame '\x05FF0Wy000012A\r'
- send_frame '\x05FF0Wy000112B\r'
- send_frame '\x05FF0Wy0002128\r'
- send_frame '\x05FF0Wy0003129\r'
- send_frame '\x05FF0Wy000412E\r'
- send_frame '\x05FF0Wy000512F\r'
- send_frame '\x05FF0Wy000612C\r'
- send_frame '\x05FF0Wy000712D\r'
- sleep 5
- echo "[*] OFF sequence"
- send_frame '\x05FF0Wy000702C\r'
- send_frame '\x05FF0Wy000602D\r'
- send_frame '\x05FF0Wy000502E\r'
- send_frame '\x05FF0Wy000402F\r'
- send_frame '\x05FF0Wy0003028\r'
- send_frame '\x05FF0Wy0002029\r'
- send_frame '\x05FF0Wy000102A\r'
- send_frame '\x05FF0Wy000002B\r'
- exec 3>&-
- echo "[*] Done"
Advertisement
Add Comment
Please, Sign In to add comment