[스크립트] 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 |