j0h

PLC_IO+ACK/NAK

j0h
May 15th, 2026
142
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 1.60 KB | None | 0 0
  1. #!/bin/bash
  2. set -euo pipefail
  3. # Send PLC commands AND show ACK NAK
  4. HOST="192.168.1.50"
  5. TCP_PORT=2101
  6. DELAY=0.15
  7. RX_TIMEOUT=0.5
  8. RX_MAX_BYTES=64
  9.  
  10. read_response() {
  11.     local data
  12.  
  13.     data=$(timeout "$RX_TIMEOUT" dd bs=1 count="$RX_MAX_BYTES" <&3 2>/dev/null | xxd -p -c 256 || true)
  14.  
  15.     if [[ -z "$data" ]]; then
  16.         echo "[RX] <timeout/no response>"
  17.         return
  18.     fi
  19.  
  20.     printf '[RX HEX] '
  21.     echo "$data" | sed 's/../& /g'
  22.  
  23.     case "$data" in
  24.         06*)
  25.             echo "[RX] ACK"
  26.             ;;
  27.         15*)
  28.             echo "[RX] NAK"
  29.             ;;
  30.         *)
  31.             printf '[RX ASCII] '
  32.             echo "$data" | xxd -r -p | sed -n 'l'
  33.             ;;
  34.     esac
  35. }
  36.  
  37. send_frame() {
  38.     local frame="$1"
  39.  
  40.     printf '[TX] '
  41.     printf '%b' "$frame" | xxd -p -c 256 | sed 's/../& /g'
  42.  
  43.     printf '%b' "$frame" >&3
  44.  
  45.     read_response
  46.     sleep "$DELAY"
  47. }
  48.  
  49. echo "[*] Connecting to ${HOST}:${TCP_PORT} ..."
  50. exec 3<>"/dev/tcp/${HOST}/${TCP_PORT}"
  51.  
  52. echo "[*] ON sequence"
  53. send_frame '\x05FF0Wy000012A\r'
  54. send_frame '\x05FF0Wy000112B\r'
  55. send_frame '\x05FF0Wy0002128\r'
  56. send_frame '\x05FF0Wy0003129\r'
  57. send_frame '\x05FF0Wy000412E\r'
  58. send_frame '\x05FF0Wy000512F\r'
  59. send_frame '\x05FF0Wy000612C\r'
  60. send_frame '\x05FF0Wy000712D\r'
  61.  
  62. sleep 5
  63.  
  64. echo "[*] OFF sequence"
  65. send_frame '\x05FF0Wy000702C\r'
  66. send_frame '\x05FF0Wy000602D\r'
  67. send_frame '\x05FF0Wy000502E\r'
  68. send_frame '\x05FF0Wy000402F\r'
  69. send_frame '\x05FF0Wy0003028\r'
  70. send_frame '\x05FF0Wy0002029\r'
  71. send_frame '\x05FF0Wy000102A\r'
  72. send_frame '\x05FF0Wy000002B\r'
  73.  
  74. exec 3>&-
  75. echo "[*] Done"
  76.  
Advertisement
Add Comment
Please, Sign In to add comment