• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            jeromewen

            努力中
            隨筆 - 9, 文章 - 0, 評論 - 22, 引用 - 0
            數據加載中……

            POP(110)監控

            #include "nids.h"
            #include <cstdio>
            #pragma comment(lib,"ws2_32")
            #pragma comment(lib,"wpcap")
            #pragma comment(lib,"libnids")
            char ascii_string[10000];
            char * char_to_ascii(char ch)
            {
            ?char * string;
            ?ascii_string[0] = 0;
            ?string = ascii_string;
            ?if(isgraph(ch))
            ?{
            ??*string++ =ch;
            ?}
            ?else if (ch == '\n' || ch == '\r')
            ?{
            ??*string++ =ch;
            ?}
            ?else
            ?{
            ??*string++ = '.';
            ?}
            ?*string? = 0;
            ?return ascii_string;
            }

            void pop3_protocol_callback(struct tcp_stream* pop3_connection, void **arg)
            {
            ?int i;
            ?char address_string[1024];
            ?char content[65535];
            ?char content_urgent[65535];
            ?struct tuple4 ip_and_port = pop3_connection->addr;
            ?strcpy(address_string, inet_ntoa(*((struct in_addr*)&(ip_and_port.saddr))));
            ?sprintf(address_string+strlen(address_string),": %i",ip_and_port.source);
            ?strcat(address_string, " <----> ");
            ?strcat(address_string, inet_ntoa(*((struct in_addr*)&(ip_and_port.daddr))));
            ?sprintf(address_string+strlen(address_string),": %i",ip_and_port.dest);
            ?strcat(address_string,"\n");
            ?switch (pop3_connection->nids_state)
            ?{
            ?case NIDS_JUST_EST:
            ??if(pop3_connection->addr.dest == 110)
            ??{
            ??pop3_connection->client.collect++;
            ??pop3_connection->client.collect_urg++;
            ??pop3_connection->server.collect++;
            ??pop3_connection->server.collect_urg++;
            ??printf("%sPOP3客戶端和服務端建立連接\n", address_string);
            ??}
            ??return;
            ?case NIDS_CLOSE:
            ??printf("---------------------------------------\n");
            ??printf("%sPOP3客戶端和服務端正常關閉\n", address_string);
            ??return;
            ?case NIDS_RESET:
            ??printf("---------------------------------------\n");
            ??printf("%sPOP3客戶端和服務端被RST關閉\n", address_string);
            ??return;
            ?case NIDS_DATA:
            ??{
            ???char status_code[5];
            ???struct half_stream* hlf;
            ???if(pop3_connection->server.count_new_urg)
            ???{
            ????printf("----------------------------------------\n");
            ????strcpy(address_string, inet_ntoa(*((struct in_addr*)&(ip_and_port.saddr))));
            ????sprintf(address_string+strlen(address_string),": %i",ip_and_port.source);
            ????strcat(address_string, " urgent----> ");
            ????strcat(address_string, inet_ntoa(*((struct in_addr*)&(ip_and_port.daddr))));
            ????sprintf(address_string+strlen(address_string),": %i",ip_and_port.dest);
            ????strcat(address_string,"\n");
            ????address_string[strlen(address_string)+1] = 0;
            ????address_string[strlen(address_string)] = pop3_connection->server.urgdata;
            ????printf("%s",address_string);
            ????return;
            ???}
            ???if (pop3_connection->client.count_new_urg)
            ???{
            ????printf("----------------------------------------\n");
            ????strcpy(address_string, inet_ntoa(*((struct in_addr*)&(ip_and_port.saddr))));
            ????sprintf(address_string+strlen(address_string),": %i",ip_and_port.source);
            ????strcat(address_string, " <------urgent");
            ????strcat(address_string, inet_ntoa(*((struct in_addr*)&(ip_and_port.daddr))));
            ????sprintf(address_string+strlen(address_string),": %i",ip_and_port.dest);
            ????strcat(address_string,"\n");
            ????address_string[strlen(address_string)+1] = 0;
            ????address_string[strlen(address_string)] = pop3_connection->server.urgdata;
            ????printf("%s",address_string);
            ????return;
            ???}
            ???if (pop3_connection->client.count_new)
            ???{
            ????hlf = &pop3_connection->client;
            ????strcpy(address_string, inet_ntoa(*((struct in_addr*)&(ip_and_port.saddr))));
            ????sprintf(address_string+strlen(address_string),": %i",ip_and_port.source);
            ????strcat(address_string, " <-----");
            ????strcat(address_string, inet_ntoa(*((struct in_addr*)&(ip_and_port.daddr))));
            ????sprintf(address_string+strlen(address_string),": %i",ip_and_port.dest);
            ????strcat(address_string,"\n");
            ????printf("----------------------------------------\n");
            ????printf("%s",address_string);
            ????memcpy(content, hlf->data, hlf->count_new);
            ????content[hlf->count_new] = '\0';
            ????if (strstr(strncpy(status_code,content,4),"+OK"))
            ?????printf("操作成功\n");
            ????if (strstr(strncpy(status_code,content,4),"-ERR"))
            ?????printf("操作失敗\n");
            ????for(i = 0;i<hlf->count_new;i++)
            ????{
            ?????printf("%s",char_to_ascii(content[i]));
            ????}
            ????printf("\n");
            ????if (strstr(content,"\n\r.\n\r"))
            ?????printf("數據傳輸結束\n");
            ???}
            ???else
            ???{
            ????hlf = &pop3_connection->server;
            ????strcpy(address_string, inet_ntoa(*((struct in_addr*)&(ip_and_port.saddr))));
            ????sprintf(address_string+strlen(address_string),": %i",ip_and_port.source);
            ????strcat(address_string, " <-----");
            ????strcat(address_string, inet_ntoa(*((struct in_addr*)&(ip_and_port.daddr))));
            ????sprintf(address_string+strlen(address_string),": %i",ip_and_port.dest);
            ????strcat(address_string,"\n");
            ????printf("----------------------------------------\n");
            ????printf("%s",address_string);
            ????memcpy(content, hlf->data, hlf->count_new);
            ????content[hlf->count_new] = '\0';
            ????if(strstr(content, "USER"))
            ?????printf("郵件用戶名為\n");
            ????if(strstr(content, "PASS"))
            ?????printf("用戶密碼為\n");
            ????if(strstr(content, "STAT"))
            ?????printf("返回統計資料\n");
            ????if(strstr(content, "LIST"))
            ?????printf("返回郵件數量和大小\n");
            ????if(strstr(content, "RETR"))
            ?????printf("獲取郵件\n");
            ????if(strstr(content, "DELE"))
            ?????printf("刪除郵件\n");
            ????if(strstr(content, "QUIT"))
            ?????printf("退出連接\n");

            ????for(i = 0;i<hlf->count_new;i++)
            ????{
            ?????printf("%s",char_to_ascii(content[i]));
            ????}
            ????printf("\n");
            ???}
            ??}
            ?default:
            ??break;
            ?}
            ?return ;
            }
            int main(int argc, char **argv)
            {
            ?if(!nids_init())
            ?{
            ??printf("出現錯誤: %s\n", nids_errbuf);
            ??exit(1);
            ?}

            ?nids_register_tcp(pop3_protocol_callback);
            ?nids_run();
            ?return 0;
            }

            posted on 2006-09-29 13:07 JeromeWen 閱讀(736) 評論(9)  編輯 收藏 引用 所屬分類: C++

            評論

            # re: POP(110)監控  回復  更多評論   

            ka看不懂
            2006-09-29 17:11 | 搞活

            # re: POP(110)監控  回復  更多評論   

            請問JeromeWen,我也在windows平臺下(我的是windows xp sp2 winpcap 3.1)做過用nids監視tcp連接的東西,編譯沒有任何問題,但是就是沒有輸出,得不到任何結果,明明有網絡連接卻監視不到,不知道怎么回事,您的例子也在我的機器上也是這樣,望指點.
            2006-10-14 15:10 | aganno2

            # re: POP(110)監控  回復  更多評論   

            我這里很正常
            2006-11-18 00:59 | j

            # re: POP(110)監控  回復  更多評論   

            在XP下,本地機器上可以抓?。保保岸丝诘模校希邪?,
            查看POP包的內容,
            內容符合個人設置策略限制,如:不讓來信人用戶名以H開頭的郵件通過

            未曾限制的郵件可以通過,從而進入Foxmail的收件箱

            勞駕回復,我的信箱,不勝感激~~??!
            hanxuexiang2006@yahoo.com.cn
            2007-03-06 22:16 | 韓學祥

            # re: POP(110)監控[未登錄]  回復  更多評論   

            郵件內容是根據base64加密的.你可以解密后,限定內容等.郵件頭中是有發現人信息的,你解析后過濾就行了.我沒有做過這個測試.
            2007-03-07 02:29 | jeromewen

            # re: POP(110)監控  回復  更多評論   

            勞駕你:可以對POP(110)監控多加一些注解嗎?我是初學者
            2007-03-07 10:42 | 韓言

            # re: POP(110)監控  回復  更多評論   

            請看nids注釋,或者下載libnids的例子看看.
            2007-03-08 09:22 | JeromeWen

            # re: POP(110)監控  回復  更多評論   

            請問:POP(110)監控----是在收信方收到郵件之前:先截獲此郵件的pop3數據包,獲取pop3包中的用戶名和密碼,直接刪除我想刪除的某一個用戶名的郵件 ,只有我沒有刪除的郵件,才能被收信方收到;
            我想pop(110)監控:在WINDOWS下能做到我認為的上述功能,你可以幫忙代碼實現一下么----基于對話框?
            2007-03-17 11:19 | 文科

            # re: POP(110)監控  回復  更多評論   

            請問:POP(110)監控----是在收信方收到郵件之前:先截獲此郵件的pop3數據包,獲取pop3包中的用戶名和密碼,直接刪除我想刪除的某一個用戶名的郵件 ,只有我沒有刪除的郵件,才能被收信方收到;
            我想pop(110)監控:在WINDOWS下---針對Foxmail能做到我認為的上述功能,你可以幫忙代碼實現一下么----基于對話框?
            2007-03-17 11:29 | 文科
            亚洲精品高清国产一线久久| 国产91久久综合| 色综合久久天天综线观看| 久久毛片免费看一区二区三区| 欧美精品一区二区久久| 四虎亚洲国产成人久久精品| 国内精品伊人久久久久777| 26uuu久久五月天| 伊色综合久久之综合久久| 亚洲色欲久久久综合网| 99久久精品免费看国产免费| 人妻丰满?V无码久久不卡| 无码人妻久久一区二区三区免费丨| 精品久久久久久国产91| 大香网伊人久久综合网2020| 伊人色综合久久天天人守人婷| 精品国产一区二区三区久久| 美女久久久久久| 嫩草影院久久99| 青青草国产精品久久| 久久夜色精品国产噜噜亚洲a| 99久久精品国产一区二区| 久久亚洲AV成人无码软件| 久久九九兔免费精品6| 亚洲欧洲精品成人久久奇米网 | 亚洲AV无码久久| 蜜桃麻豆www久久国产精品| 久久不射电影网| 久久国产色AV免费观看| 久久久久久九九99精品| yy6080久久| 欧美久久久久久| 亚洲一区精品伊人久久伊人| 久久人人爽人人爽人人片AV东京热 | 国产A三级久久精品| 久久成人小视频| 久久久久高潮综合影院| 少妇熟女久久综合网色欲| 国产精品美女久久福利网站| 久久亚洲AV无码精品色午夜麻豆 | 性做久久久久久久久久久|