📄 417.htm
字号:
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 + -