‘Autoit’ – giám sát tiến trình và khởi động lại nếu tiến trình ngừng chạy

0. Cách giám sát một tiến trình (qua PID) và khởi động lại tiến trình đó nếu phát hiện ngưng chạy, thông qua ‘autoit’

1.Source:

https://www.autoitscript.com/forum/topic/140046-_alwaysrun-monitor-a-program-and-restart-if-it-closed/

STEP_1:

Function: Using a Batch file. Save as _AlwaysRun.au3

// _AlwaysRun($sFilePath[, $sCommandline = ”])
#include-once
#include <Constants.au3>

; #FUNCTION# ====================================================================================================================
; Name ..........: _AlwaysRun
; Description ...: Monitor when a program closes and then restart it.
; Syntax ........: _AlwaysRun($sFilePath[, $sCommandline = ''])
; Parameters ....: $sFilePath           - FilePath of the program to monitor and restart.
;                  $sCommandline        - [optional] A commandline string to pass to the program on restart. Default is ''.
; Return values .: Success - Returns the PID of the batch file.
;                   Failure - Returns 0 & sets @error to non-zero
; Author ........: guinness
; Example .......: Yes
; ===============================================================================================================================
Func _AlwaysRun($sFilePath, $sCommandline = '')
    If $sFilePath = @ScriptFullPath And @Compiled = 0 Then
        Return SetError(1, 0, 0)
    EndIf

    Local Const $STR_NOCASESENSEBASIC = 2
    Local Const $sAppName = StringTrimLeft($sFilePath, StringInStr($sFilePath, '\', $STR_NOCASESENSEBASIC, -1))
    Local $sFileName = StringReplace(@ScriptName, StringTrimLeft(@ScriptName, StringInStr(@ScriptName, '.', $STR_NOCASESENSEBASIC, -1) - 1), '')
    While FileExists(@TempDir & '\' & $sFileName & '.bat')
        $sFileName &= Chr(Random(65, 122, 1))
    WEnd
    If $sCommandline Then
        $sCommandline = ' ' & $sCommandline
    EndIf
    Local Const $sData = ':START' & @CRLF _
             & 'PING -n 2 127.0.0.1 > nul' & @CRLF _
             & @CRLF _
             & 'TASKLIST /NH /FI "IMAGENAME EQ ' & $sAppName & '" | FIND /I "' & $sAppName & '" >nul && GOTO START' & @CRLF _
             & 'GOTO END' & @CRLF _
             & ':END' & @CRLF _
             & 'START "_AlwaysRun" "' & $sFilePath & '"' & $sCommandline & @CRLF _
             & 'GOTO START' & @CRLF

    Local Const $hFileOpen = FileOpen(@TempDir & '\' & $sFileName & '.bat', $FO_OVERWRITE)
    If $hFileOpen = -1 Then
        Return SetError(2, 0, 0)
    EndIf
    FileWrite($hFileOpen, $sData)
    FileClose($hFileOpen)
    Return Run(@TempDir & '\' & $sFileName & '.bat', @TempDir, @SW_HIDE)
EndFunc   ;==>_AlwaysRun

 

STEP_2

Compiled this autoit file, to run with ‘Script full path’

#AutoIt3Wrapper_Au3Check_Parameters=-d -w 1 -w 2 -w 3 -w- 4 -w 5 -w 6 -w 7
#include <Constants.au3>

#include '_AlwaysRun.au3'

; Compile the following script before running.
If @Compiled Then
    Example()
EndIf

Func Example()
    Local $iPID = IniRead(@ScriptDir & '\_AlwaysRunPID.ini', 'Monitor', 'PID', 0)

    ; Check if the monitoring process is running. If not then call the function _AlwaysRun. (This is the reason why the PID was saved to an INI file.)
    If ProcessExists($iPID) = 0 Then
        ; Start monitoring the current script path for when it closes and restart if necessary. No commandline parameters are passed.
        $iPID = _AlwaysRun(@ScriptFullPath, '')

        If @error Then
            Exit MsgBox($MB_SYSTEMMODAL, '_AlwaysRun()', 'The running script must be a compiled exe to work correctly.')
        EndIf

        ; Save the PID returned by _AlwaysRun to an INI file in case we need to close the monitoring process in the future.
        IniWrite(@ScriptDir & '\_AlwaysRunPID.ini', 'Monitor', 'PID', $iPID)
    Else
        Local Const $aArray[2] = ['No', 'Yes']
        If MsgBox(BitOR($MB_YESNO, $MB_SYSTEMMODAL), '_AlwaysRun Running: ' & $aArray[Number(ProcessExists($iPID) > 0)], 'Would you like to continue running the _AlwaysRun Example?') = 7 Then
            FileDelete(@ScriptDir & '\_AlwaysRunPID.ini')
            Exit ProcessClose($iPID)
        EndIf
    EndIf
    Exit 0
EndFunc   ;==>Example
Advertisements

Netsec – raw packet payload

Tạo, sao chép payload gói tin và gửi gói tin với payload vừa tạo
Create, copy packet payload and resend with another tools

0_ Introduction

Gửi và xử lý gói tin nhận được với PAYLOAD tùy biến
Send and handle received packets with any payload

1_ Gửi payload

sử dụng tool ncat (windows tool) để gửi payload bất kỳ (binary)

*ncat : công cụ gừi và nhận (listening) packet trên UPD/TCP

Step0. Bật chương trình bắt gói trước khi tạo traffic ở step1

Step1. tạo payload bằng công cụ snmpget (example:http://www.net-snmp.org/download.html) – mục đích: tạo traffic với payload chuẩn (ở đây là gói snmp) và copy payload này để gửi với ncat ở Step.3

D:\Tool\usr\snmp>snmpget -L o  -t 2.5 -d -v 1 -c examplestring 192.168.1.1 SNMPv2-MIB::sysName.0

Sending 48 bytes to UDP: [0.0.0.0]->[192.168.1.1]:161
0000: 30 2E 02 01  00 04 0D 65  78 61 6D 70  6C 65 73 74    0......examplest
0016: 72 69 6E 67  A0 1A 02 02  4B 59 02 01  00 02 01 00    ring ...KY......
0032: 30 0E 30 0C  06 08 2B 06  01 02 01 01  05 00 05 00    0.0...+.........

Step2. export binary payload (packet capture)
Tiến hành export để lấy payload dưới dạng binary như hình

capture_paket_payload_export.png

Step3. chèn (piping) payload vừa export vào ncat, gửi thử đến 1 IP khác (10.0.0.1)

D:\Tool\ncat>type  rawSNMP_2.bin | ncat -v -u 10.0.0.1 161
Ncat: Version 7.40 ( https://nmap.org/ncat )
Ncat: Connected to 10.0.0.1:161.\
Ncat: 48 bytes sent, 0 bytes received in 0.45 seconds.

Kết quả: có thể gửi payload đã copy (đúng theo giao thức snmp-get) từ ncat, với địa chỉ đích: 10.0.0.1

capture_paket_payload_resend.png

 

Arduino – truyền nhận dữ liệu không dây – RF

Lab: Arduino – tuyền nhận dữ liệu qua sóng RF

0./ Mục đích và Nguyên lý:

Mục đích:

Test phần cứng, điều khiển & kếtt nối của module truyền/nhận RF (nrf24l01) với kit arduino uno r3. Xem khoảng cách truyền nhận sóng của module trong các tình huống khác nhau.

Nguyên lý:

2 Bộ xử lý và truyền nhận sóng, một bộ đóng vai trò server và một bộ đóng vai trò client. Cả 2 bộ đều có khả năng truyển và nhận data, xử lý và hiển thị qua IDE “console monitor”

1./ Kết nối và nạp chương trình:

Kết nối chân (in) như hình:

Arduino-RF testing_cilentNServer circuit

Xin tham khảo chi tiết tại trang web:

Complete Guide for nRF24L01 – 2.4GHz RF Transceiver Module With Arduino

2./ Kết quả:

arduino-RF-test

2 bộ điều khiển và truyền nhận sóng RF

RF testing_server-client

Nạp và chạy chương trình, Console clien và server đã nhận được dữ liệu từ đầu xa.

Thử nghiệm – Tự động hóa – Arduino (setup & chạy thử)

/*Thử nghiệm cơ bản với Arduino*/


0/ Giới thiệu chung:

Arduino (tên công ty/dự án/cộng đồng) là bảng mạch (board) vi xử lý, dựa trên nền tảng nguồn mở về phần cứng và phân mềm. Bảng mạch được tạo thành từ nghiều sản phẩm của nhiều nhà cung cấp khác nhau, với:

Thành phần trung tâm là chip vi xử lý,
Các chân giao tiếp vào/ra (I/O) đa năng,
Cổng giao tiếp với máy tính qua USB (cung cấp nguồn và cũng để dùng nạp chương trình)

Để lập trình cho bảng mạch, có IDE (integrated development evironment) <kiểm tra lổi và nạp/chạy chương trình trên chip vi xử lý).


1/ Chạy IDE, viết và nạp chương trình đầu tiên

i. download IDE (https://www.arduino.cc/download_handler.php)
IDE này sử dụng cho mạch arduino uno r3 (made in italy – có thể mua nhiều nơi ở VN, giá ~ 170k)

ii. Cài đặt IDE (lưu ý có cái driver usb uno trong quá trình cài đặt)

arduino-ide-firstSketch.JPG

Chạy arduino IDE, set cổng USB theo vị trí cắm dây board mạch (trong hình là USB COM3)

Xem thêm