⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 417.htm

📁 unix高级编程原吗
💻 HTM
📖 第 1 页 / 共 2 页
字号:
        bzero(ports, sizeof(ports)); <br>

        for(i=1; i<PORTS ; i++) <br>

        { <br>

                bzero(packet, sizeof(packet)); <br>

                i_hdr = (struct iphdr *)packet; <br>

                i_hdr->ihl = 5; <br>

                i_hdr->version = 4; <br>

                i_hdr->frag_off = htons(IP_DF); <br>

                i_hdr->ttl = 64; <br>

                i_hdr->protocol = IPPROTO_TCP; <br>

                i_hdr->daddr = sa_to.sin_addr.s_addr; <br>



                i_hdr->saddr = sa_fr.sin_addr.s_addr; <br>

                t_hdr = (struct t_tcphdr *)(packet + sizeof(struct iphdr)); <br>

                t_hdr->thdr.source = htons(SRCPORT); <br>

                t_hdr->thdr.dest = htons(i); <br>

                t_hdr->thdr.seq = htonl(seq); <br>

                t_hdr->thdr.ack_seq = 0; <br>

                t_hdr->thdr.doff = 5 + syn; <br>

                t_hdr->thdr.fin = 1-syn; <br>

                t_hdr->thdr.syn = syn; <br>

                t_hdr->thdr.ack = 0; <br>

                t_hdr->thdr.window = htons(32120); <br>

                bzero(pseudoHead, HEADER_LEN); <br>

                pseudo = pseudoHead; <br>

                memcpy(pseudo, &(i_hdr->saddr), 8); <br>

                pseudo += 9; <br>

                memcpy(pseudo , &(i_hdr->protocol), 1); <br>

                pseudo++; <br>

                if( !syn ) <br>

                { <br>

                        tcp_len = htons( sizeof(struct tcphdr) ); <br>

                        memcpy(pseudo, &tcp_len, 2); <br>

                        pseudo += 2; <br>



                        memcpy(pseudo, t_hdr, sizeof(struct tcphdr)); <br>

                        t_hdr->thdr.check = in_chksum((u_short *)pseudoHead, <br>

 HEA <br>

DER_LEN - 4); <br>

                        if( sendto(sock_raw, packet, sizeof(struct tcphdr) + <br>

 siz <br>

eof(struct iphdr), <br>

                                0, &sa_to, sizeof(sa_to)) < 0 ) <br>

                                perror("Sendto"); <br>

                } <br>

                else <br>

                { <br>

                        t_hdr->opt_name = 2; <br>

                        t_hdr->opt_len = 4; <br>

                        t_hdr->opt = htons(1460); <br>

                        tcp_len = htons( sizeof(struct t_tcphdr) ); <br>

                        memcpy(pseudo, &tcp_len, 2); <br>

                        pseudo += 2; <br>

                        memcpy(pseudo, t_hdr, sizeof(struct t_tcphdr)); <br>

                        t_hdr->thdr.check = in_chksum((u_short *)pseudoHead, <br>

 HEA <br>

DER_LEN); <br>

DER_LEN); <br>

                        if( sendto(sock_raw, packet, sizeof(struct iphdr) + <br>

size <br>

of(struct t_tcphdr), <br>

                                0, &sa_to, sizeof(sa_to)) < 0 ) <br>

                                perror("Sendto"); <br>

                } <br>

                usleep(10); <br>

                bzero(packet, sizeof(packet)); <br>

                //54 is the sizeof iphdr + tcphdr + ethhdr <br>

                if( (flag = recvfrom(sock_pck, packet, 1024, 0, &sa, &len)) <br>

< 54 <br>

) <br>

                        continue; <br>

                i_hdr = (struct iphdr *)(packet + sizeof(struct ethhdr)); <br>

                if( i_hdr->daddr == sa_fr.sin_addr.s_addr && i_hdr->saddr == <br>

 sa_ <br>

to.sin_addr.s_addr ) <br>

                { <br>

                        thdr = (struct tcphdr *)(packet + sizeof(struct ethh <br>

dr) <br>

+ sizeof(struct iphdr)); <br>

                        if( syn && thdr->ack == 1 && thdr->ack_seq == htonl( <br>



seq+ <br>

1) && <br>

                                thdr->dest == htons(SRCPORT) ) <br>

                        { <br>

                                if( thdr->rst == 0 ) <br>

                                        printf("%s's port %4d is on service\ <br>

n", <br>

argv[2], <br>

                                                ntohs(thdr->source)); <br>

                        } <br>

                        else if( !syn && thdr->window == 0 && (thdr->ack_seq <br>

 == <br>

htonl(seq) || <br>

                                thdr->ack_seq == htonl(seq+1)) && thdr->dest <br>

 == <br>

htons(SRCPORT) ) <br>

                                if( thdr->rst == 1 ) <br>

                                        ports[ntohs(thdr->source)] = 1; <br>

                } <br>

        } <br>

        printf("Seq : %d\n", seq); <br>

        if( !syn ) <br>



        for(i=1; i<PORTS; i++) <br>

                if(ports[i] == 0) <br>

                        printf("%s's port %4d is on service\n", argv[2], i); <br>

  <br>

        return 0; <br>

} <br>

【 在 cloudsky (小四) 的大作中提到: 】 <br>

: 如果是这样,建议用NetXray抓包,看看checksum是否正确。 <br>

: 再检查检查自己生成校验和的代码。 <br>

:发信人: cloudsky (小四), 信区: Security <br>

标  题: Re: SYN/FIN扫描器的问题 <br>

发信站: 武汉白云黄鹤站 (Sat Mar 25 22:27:00 2000), 站内信件 <br>

FIN扫描我也没有测试过,不过nmap是实现了的。 <br>

nmap可以在packetstorm下载到最新版本,或者到 <br>

freesoft.cei.gov.cn上搜索,国内下载。源代码 <br>

和BIN都有的说。 <br>

pthread_create函数在redhat下支持得很好,你搞错 <br>

了什么。我的建议是看UNP中关于多线程的一章,那里 <br>

介绍的东西统统适用于redhat,不用怀疑。唯一可能 <br>

需要提醒你的是-lpthread编译开关。不必单独下载任何 <br>

东西支持多线程编程。 <br>

你的两个程序我都F回去了,等有时间好好看看。关于 <br>



FIN扫描,这个技术是严重依赖于各种操作系统的TCP协议栈 <br>

的实现的,就和反sniffer一样,所以你提到的现象也许 <br>

并不奇怪。 <br>

很高兴看到有你这样喜欢研究细节的朋友出现在版面上, <br>

看IP是来自水木清华的,很感慨,有点可惜,因为我本人 <br>

最近没空研究扫描工具,有段时间还是写了不少程序的, <br>

你可以去bbs.x18.scut.edu.cn(华南西18)和华南理工计算机 <br>

科学系的朋友切磋切磋。如果有多线程编程的问题,可以在 <br>

:发信人: AngelFalls (Happiness Forever), 信区: Security <br>

标  题: Re: SYN/FIN扫描器的问题 <br>

发信站: 武汉白云黄鹤站 (Mon Mar 27 10:27:31 2000), 站内信件 <br>

确实是因为没有-lpthread.真是很惭愧的说. <br>

我用pthread改写了以后发现用fin scan可以和syn scan <br>

一样对Linux和Unix机器进行扫描,以前得不到正确的结果 <br>

应该是usleep的事件的设置不好. <br>

再次感谢cloudsky的帮助. <br>

另外我想问一下Richard Stevens的<<TCP/IP Illustrated>> <br>

是不是一共有3 Volumns?每一卷有多少本?都讲的是什么东西? <br>

在中国有地方买吗?English or Chinese is both OK. <br>

Thank u beforehand. <br>

:发信人: cloudsky (小四), 信区: Security <br>

标  题: Re: SYN/FIN扫描器的问题 <br>



发信站: 武汉白云黄鹤站 (Mon Mar 27 12:44:08 2000), 站内信件 <br>

那些书在各个高校的BBS上不都在征订嘛,不过我建议 <br>

买vol II就可以了,这是对BSD最后分发版本的经典诠释, <br>

主要针对TCP/IP协议的实现。vol III在北京图书馆有 <br>

借。vol I嘛看看就可以了,科普读物。每卷就一本,很 <br>

厚的那种。 <br>

麻烦把你的修改后完整的syn/fin多线程扫描程序贴一下 <br>

吧,这样大家都可以学习学习。thanks <br>

</small><hr>
<p align="center">[<a href="index.htm">回到开始</a>][<a href="316.htm">上一层</a>][<a href="418.htm">下一篇</a>]
<p align="center"><a href="http://cterm.163.net">欢迎访问Cterm主页</a></p>
</table>
</body>
</html>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -