• <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 閱讀(735) 評論(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下,本地機器上可以抓取110端口的POP包,
            查看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 | 文科
            国产精品成人99久久久久| 精品国产乱码久久久久软件| 久久精品中文字幕一区| 亚洲va中文字幕无码久久| 秋霞久久国产精品电影院| 亚洲欧美另类日本久久国产真实乱对白 | 欧美一区二区精品久久| 久久久久国产精品三级网| 一本色道久久88综合日韩精品 | 一本色道久久99一综合| 新狼窝色AV性久久久久久| 91久久成人免费| 亚洲精品无码专区久久久| 韩国三级中文字幕hd久久精品| 无码久久精品国产亚洲Av影片| 99精品伊人久久久大香线蕉| 欧美亚洲国产精品久久久久| 久久久久亚洲AV成人片| 久久受www免费人成_看片中文| 国产精品美女久久久久AV福利| 久久天天躁狠狠躁夜夜96流白浆| 天堂无码久久综合东京热| 一级做a爱片久久毛片| 国产午夜福利精品久久2021| 午夜精品久久影院蜜桃| 99久久精品九九亚洲精品| 亚洲精品乱码久久久久久蜜桃不卡| 日韩一区二区三区视频久久| 好久久免费视频高清| 久久精品中文无码资源站| 色综合久久无码五十路人妻| 久久免费视频1| 亚洲欧洲精品成人久久曰影片| 亚洲精品WWW久久久久久| 久久精品国产只有精品66| 88久久精品无码一区二区毛片 | 久久最近最新中文字幕大全| 久久精品99久久香蕉国产色戒| 久久丫精品国产亚洲av不卡 | 国产呻吟久久久久久久92| 久久91精品国产91久久麻豆|