본문 바로가기
프로그램...

[스크립트] Lua

by 크크다스 2019. 3. 14.
반응형

[스크립트] Lua


참고 링크들>

https://www.lua.org/pil/4.3.2.html

https://wiki.wireshark.org/LuaAPI


Syntax Checker> https://rextester.com/l/lua_online_compiler

자신의 코드를 검사하기 좋은 사이트임.


단숨에 루아(Lua) 스크립트 배우기> https://blog.wonhada.com/?p=331

1. Lua는 대소문자를 구분합니다. 즉, version과 Version은 다른 것으로 구분됩니다.


2. 명령줄 끝에 ;를 붙여도 되고 안붙여도 됩니다. 일반적으로는 붙이지 않습니다.

print(9)  -- 가능

print(9); -- 가능


3. 한줄 주석은 — 를 이용하고 다중 라인 주석은 –[[와 ]]를 이용합니다.

한줄 주석

--print("주석 테스트")


다중 라인 주석

--[[

     print("주석 테스트")

]]


4. 변수 타입을 선언하지 않아도 됩니다. 또한, 타입이 동적으로 변환됩니다.

local boo = 3

boo = {5, "string", 0.6}

print (boo[2]) -- string (테이블은 1 부터 인덱싱됩니다)


5. 변수는 local과 global로 나뉩니다. 변수앞에 local 키워드를 붙이면 local 변수고, 아무것도 안붙이면 global 변수가 됩니다.

on getNum()

     n = 10 -- global

     return n

end

print(getNum())

print(n)


6. 배열은 table이며 1부터 인덱싱이 됩니다. 또한, 이름으로 인덱싱할 수도 있습니다.

local tbl = {first=10, 20, second=30, 40} -- 이름으로 인덱싱할 경우 기본 숫자 인덱싱에서는 제외됩니다.

print(tbl[1]) -- 20

print(tbl[2]) -- 40

print(tbl["first"]) -- 10

print(tbl.second) -- 30


-- 다차원 배열 예

local arr = {}

arr[1] = {1, 2, 3}

print(arr[1][2]) -- 2


7. 연산자

+, -, *, /, %, ^ 등 수식 연산자는 JavaScript/ActionScript와 동일합니다.

관계연산자에서 다른 부분이 하나 있는데, != 대신 ~=를 사용합니다. (==, ~=, <, , ]]><=, >=)

논리 연산자는 and, or, not을 사용합니다.

문자열의 연결은 ..을 이용합니다. PHP의 경우는 . 하나를 이용하는데 Lua는 두개입니다.

또한 배열이나 문자열의 길이를 구할 때 보통은 length를 이용하는데 Lua는 #을 이용합니다. (num.length => #num)


<연산자 우선순위 (높은순)>

^

not # – (부호인 단항연산자)

* / %

+ –

..

> < >= <= ~= == and or <도트 연산자>

JavaScript/ActionScript의 경우는 프로퍼티와 메소드에 접근할 때 . 연산자를 이용합니다. Lua의 경우 프로퍼티는 . 로 접근하지만 메소드는 : 을 이용합니다.


JavaScript

object.translate( 10, 10 );


Lua

object:translate( 10, 10 )


8. 메모리 관리는 Java, C#, ActionScript가 그러하듯 Lua도 가비지 컬렉터가 자동으로 알아서 해줍니다. 따라서, 초급 개발자도 쉽게 개발이 가능합니다.


9. 변수에 다중 할당이 가능합니다. 변수값 스와핑에 유용하겠네요.

local x = 3

local y = 5

print(x, y) -- 3  5

x,y = y, x

print(x, y) -- 5  3

10. Lua의 함수는 여러개의 값을 리턴 할 수 있습니다. 위 9번에서 살펴본 것처럼 변수에 다중 할당해서 사용할 수 있습니다.

function getParams()

     return 3, 5

end

local a, b = getParams()

print(b); -- 5

Lua언어의 기본적인 특징을 살펴봤습니다. 기존에 다른 언어를 하셨던 분들은 힘들이지 않고 쉽게 적응하실 것입니다.


Wireshark Dissector> https://meetup.toast.com/posts/103

적용 방법>

    Wireshark 설치 위치의 init.lua 맨 끝에 자신의 lua 파일 지정

    Linux> /usr/share/wireshark

    Windows> Program Files\\Wireshark

    dofile("D:\\tools\\mine.lua")


Wireshark Dissector Errors>

"ProtoField/Protocol handle is invalid">

    자신이 정의한 프로토콜에 지정하지 않고 Field를 사용할 때 발생.

   즉, 아래중에 "p_test.fields"에 할당하지 않고 사용할 때

local p_test = Proto("test","Test.");

local f_packet_length = ProtoField.uint32("packet_length")
local f_padding_length = ProtoField.uint8("padding_length")


p_test.fields = {
f_packet_length,
f_padding_length
}


A dissector tutorial script> https://wiki.wireshark.org/Lua/Examples

Tutorial scripts

A dissector tutorial script

A dissector tutorial with TCP-reassembly

A custom file reader & writer tutorial script

A pcap FileShark script

Simple Examples

Using Lua to register protocols to more ports

dumping to multiple files

editing columns

dialogs and TextWindows

Packet counter

View Packet Tree of Fields/FieldInfo

Extract field values

Dump VoIP calls into separate files


Wireshark LuaAPI> https://wiki.wireshark.org/LuaAPI

1.1 Dumper

1.2 PseudoHeader

Obtaining dissection data


2.1 Field

2.2 FieldInfo


2.3 Non Method Functions

GUI support


3.1 ProgDlg


3.2 TextWindow


3.3 Non Method Functions


Post-dissection packet analysis


4.1 Listener


Obtaining packet information


5.1 Address

5.2 Column

5.3 Columns


5.4 Pinfo


Functions for writing dissectors


6.1 Dissector


6.2 DissectorTable


6.3 Pref


6.4 Prefs


6.5 Proto


6.6 ProtoField


6.7 Non Method Functions

Adding information to the dissection tree


7.1 TreeItem


Functions for handling packet data


8.1 ByteArray


8.2 Tvb


8.3 TvbRange


Utility Functions


9.1 Dir


9.2 Non Method Functions


Handling 64-bit Integers


10.1 Int64


10.2 UInt64


반응형

'프로그램...' 카테고리의 다른 글

[Perl] 잡다(Sort, .....)  (0) 2019.08.23
[색상] 색의 표현 방식 [펌]  (0) 2019.05.03
[TTL] TeraTerm MACRO  (0) 2019.02.25
[WLAN] 용어사전  (0) 2018.12.17
[무료S/W] 백신  (0) 2018.08.07