====== 토렌트 파일 포맷 조사 ====== 거두절미하고 토렌트 파일 포맷에 대해 소개합니다. ===== Bencode ====== 토렌트 파일 포맷의 근간은 Bencode(B encode)입니다. 형식은 바이너리 파일이지만 자유롭게 확장이 가능한, 유연한 구조를 가지고 있습니다. ==== Bencode Data Type ==== Bencode는 네가지 데이터 타입을 지원합니다. * 바이트 스트링 (byte string) * 정수 (integer) * 리스트 (list) * 사전 (dictionary) === 바이트 스트링 (byte string) ==== 바이트 스트링은 바이트의 나열입니다. 기본적으로 ASCII 코드로 가정하며, 인코딩에 대해서는 신경쓰지 않습니다. '<길이>:<문자열>' 식으로 표현합니다. 그러므로 'apple'을 bencode하면 '5:apple'이 되겠네요. 문자열 끝은 널(null) 문자가 아닙니다. 문자열의 길이는 10진법으로 표시하며 0이 될 수 있습니다. 문자열의 길이를 나타내는 숫자 또한 단순한 아스키 문자입니다. === 정수 (integer) === 정수는 처음에 'i'라는 문자열이 나옵니다. 그리고 'e'로 마칩니다. i, e 사이에는 0~9사이의 아스키 문자가 나옵니다. 이 아스키 문자가 정수입니다. 0은 허용하지만 0이 아닌 수에 처음으로 나오는 0은 허용하지 않습니다. 음수는 '-' 기호를 붙여 표기하면 됩니다. -0도 안 됩니다. 그러므로 정수 56과 -32를 각각 Bencode하면 'i56e', 'i-32e'가 되겠네요. === 리스트 (list) === 리스트는 'l'과 'e' 사이에 데이터를 적어주기만 하면 됩니다. 리스트 ['a', 'bar', 78]은 'l1:a3:bari78ee'로 인코딩되는군요. === 사전 (dictionary) === 딕셔너리는 'd'와 'e' 사이에 키와 값을 적으면 됩니다. 키는 반드시 사전순서야만 하고 키 다음에 바로 해당 키의 값이 나와야 합니다. (키, 값) 쌍의 목록인 (apple, fruit), (lion, animal), (cat, 12)를 Bencode해 보겠습니다. 각 키 값을 따로따로 Bencode하면 * 5:apple 5:fruit * 4:lion 6:animal * 3:cat i12e 키를 사전 순으로 정렬한 후 모두 합치면 'd5:apple5fruit3:cati12e4:lion6:animale'이 됩니다. ===== 토렌트 파일 포맷 ===== ===== 참고 문헌 ===== * [[http://en.wikipedia.org/wiki/Torrent_file | Torrent file - Wikipedia]] * [[http://en.wikipedia.org/wiki/Bencode | Bencode - Wikipedia]]