發現snort可以同時應用fast和unsock模式。-A fast -A unsock 不過是先fast後unsock
#########過程中一些函數學習。
*結構體 in_addr 用來表示一個32位的IPv4地址.
extern void *memcpy(void *destin, void *source, unsigned n); ###由source指向地址為起始地址的連續n個字節的數據復制到以destin指向地址為起始地址的空間內。(baidu)
public: int SendTo(
SOCKET s;
unsigned char buffer __gc[],
int size,
SocketFlags socketFlags,
sockaddr FAR *addr
int len
);
返回值:實際發送數據的長度。
parameter :
s 套接字
buff 待發送數據的緩沖區
size 緩沖區長度
Flags 調用方式標志位, 一般為0, 改變Flags,將會改變Sendto發送的形式
addr (可選)指針,指向目的套接字的地址
len addr所指地址的長度
size_t fwrite(const void*buffer,size_t size,size_t count,FILE*stream);
注意:這個函數以二進制形式對文件進行操作,不局限於文本文件
返回值:返回實際寫入的數據塊數目
(1)buffer:是一個指針,對fwrite來說,是要輸出數據的地址。
(2)size:要寫入內容的單字節數;
(3)count:要進行寫入size字節的數據項的個數;
(4)stream:目標文件指針。
1。void *memset(void *s,int c,size_t n)
總的作用:將已開辟內存空間 s 的首 n 個字節的值設為值 c。將s所指向的某一塊內存中的每個字節的內容全部設置為ch指定的ASCII值, 塊的大小由第三個參數指定,這個函數通常為新申請的內存做初始化工作, 其返回值為指向S的指針。
#############################尋找unsock下snort的ip輸出和時間輸出
找此結構是通過->ip之間的符號找到LogIpAddrs函數,輸出ip->ip。
printf("!!!!!!!!!!!!!%s:%d\n",inet_ntoax(GET_SRC_ADDR(p)), p->sp);可以在輸出結構體p中的ip和端口
在packet結構體中有:x->ip4_header->source 和x->iph->ip_src 存放原ip地址。
順籐摸瓜找到:inet_ntoax(GET_SRC_ADDR(p)), p->sp ########輸出ip和端口。(懷疑inet_ntoax是inet_ntoa的變體函數,在snort的頭文件中實現)
linux下:
函數聲明:char *inet_ntoa (struct in_addr);
返回點分十進制的字符串在靜態內存中的指針。
printf("@@@@@@@@@@@@%s:%d\n",inet_ntoax(GET_SRC_ADDR(p)), p->sp); ##可以把p中的ip和端口輸出。
查找pkt是否有ip。。等信息
(2)時間戳LogTimeStamp(data->log, p);在這裡實現。同理也很簡單。
建立Alertpkt_txt的結構體,裝入msg ip 時間戳 端口。用socket傳結構體,目的達到。