2017年12月28日 星期四

Linux下移除^M符號問題 dos2unix

在Linux下,有機會用vim來編輯windows下的文件,會發現文件每行結尾都為^M符號, 這是因為Linux編輯器和DOS編輯器的換行符號不同所導致,以下可以移除^M符號。
$ dos2unix <file>

將檔案從stage移除

1. 在提交檔案時會有兩個步驟
git add 將檔案從unstage變為stage
git commit 將檔案寫入repository
2. 當git add後,發現加錯檔案,想將檔案從stage變回unstage,有兩個方式。 2.1 當檔案不在repository內
git rm --cached 
2.2 當檔案已經在repository內
git reset HEAD 
3. 參考來源 http://oomusou.io/git/git-remove-stage/

2017年12月13日 星期三

ELF header解析

1. ELF base type
/* 32-bit ELF base types. */
typedef __u32 Elf32_Addr;
typedef __u16 Elf32_Half;
typedef __u32 Elf32_Off;
typedef __s32 Elf32_Sword;
typedef __u32 Elf32_Word;

/* 64-bit ELF base types. */
typedef __u64 Elf64_Addr;
typedef __u16 Elf64_Half;
typedef __s16 Elf64_SHalf;
typedef __u64 Elf64_Off;
typedef __s32 Elf64_Sword;
typedef __u32 Elf64_Word;
typedef __u64 Elf64_Xword;
typedef __s64 Elf64_Sxword;
2. ELF header
typedef struct elf32_hdr{
  unsigned char e_ident[EI_NIDENT];
  Elf32_Half e_type;
  Elf32_Half e_machine;
  Elf32_Word e_version;
  Elf32_Addr e_entry;  /* Entry point */
  Elf32_Off e_phoff;
  Elf32_Off e_shoff;
  Elf32_Word e_flags;
  Elf32_Half e_ehsize;
  Elf32_Half e_phentsize;
  Elf32_Half e_phnum;
  Elf32_Half e_shentsize;
  Elf32_Half e_shnum;
  Elf32_Half e_shstrndx;
} Elf32_Ehdr;
可用"readelf -h"命令dump出ELF header
3. Program header
typedef struct elf32_phdr{
  Elf32_Word p_type;
  Elf32_Off p_offset;
  Elf32_Addr p_vaddr;
  Elf32_Addr p_paddr;
  Elf32_Word p_filesz;
  Elf32_Word p_memsz;
  Elf32_Word p_flags;
  Elf32_Word p_align;
} Elf32_Phdr;
可用"readelf -l"命令dump出Program header
4. Section header
typedef struct elf32_shdr {
  Elf32_Word sh_name;
  Elf32_Word sh_type;
  Elf32_Word sh_flags;
  Elf32_Addr sh_addr;
  Elf32_Off sh_offset;
  Elf32_Word sh_size;
  Elf32_Word sh_link;
  Elf32_Word sh_info;
  Elf32_Word sh_addralign;
  Elf32_Word sh_entsize;
} Elf32_Shdr;
可用"readelf -S"命令dump出Section header,sh_name可由第e_shstrndx取得,e_shstrndx指向[27] .shstrta。
5. Symbol talbe
typedef struct elf32_sym{
  Elf32_Word st_name;
  Elf32_Addr st_value;
  Elf32_Word st_size;
  unsigned char st_info;
  unsigned char st_other;
  Elf32_Half st_shndx;
} Elf32_Sym;
可用"readelf -s"命令dump出Symbol table,st_name可由[28] .symtab的sh_link取得,sh_link指向[29] .strtab。
6. 參考來源 http://www.cirosantilli.com/elf-hello-world/ https://ctf-wiki.github.io/ctf-wiki/executable/elf/elf_structure.html

2017年12月9日 星期六

srTCM 介紹

1. srTCM介紹
流量控制叫作"Single Rate Three Color Marker",裡頭有三大陣營,分別是紅色、黃色、綠色。
這三個陣營會在入會條件成立的時候,將封包納為自己的成員。
 
三個顏色陣營管轄範圍如下(紅框部份):
綠色: Conforming Action
黃色: Partial Conforming Action
紅色: Non-Conforming Action
 
三個陣營會分別替自己的成員打上 DSCP Mark 1、2、3(紅框部份)。
而這三個陣營有一個共識,可接受的平均速度(Committed Rate)等於10Mbps。並且訂出加入各陣營的條件(灰框部份)。
以這個共識為前提,當經過入會條件判別體積(Committed Burst Size)小於1kByte的時候,會被綠色陣營接管,加上DSCP Mark 1。
體積(Committed Burst Size)大於1kByte且小於最大能容忍的體積(Excess Burst Size)2kBytes的時候,會被黃色陣營接管,加上DSCP Mark 2。
但是當瞬間湧入體積大於2kBytes且打破三陣營共識(Committed Rate = 10Mbps)的時候,會被紅色陣營接管,加上DSCP Mark 3。

2. srTCM測試環境 
三個陣營的條件和行動方針,明定列於ebtables –t nat公佈欄上。
重點來了,要如何知道三色陣營有按照規矩做事?
 
LAN PC - Router - WAN PC (10.1.1.100)
 
稽核工具:hping3。目的為設定封包大小,且可設定1s送出多少封包。
 
以下動作由稽核人員(LAN PC)執行。
綠色確認:hping3 10.1.1.100 –S -1 –p 888 –d 900 => 在WAN PC抓封包可以看到DSCP = 1
黃色確認:hping3 10.1.1.100 –S -1 –p 888 –d 1200 => 在WAN PC抓封包可以看到DSCP =2
紅色確認:hping3 10.1.1.100 –S -1 –p 888 -i u10 –d 2200 => 1s送出10個封包,在WAN PC上可以看到DSCP = 2 和 DSCP = 3

3. 參考來源
http://blog.xuite.net/ian11832/blogg/197448684