最近在学习TCP3次握手,于是想写一个基于SYN的端口扫描
我的想法是通过循环来改变TCP报文的dest端口来根据回传进行判断
可我通过tcpdump抓包时
发现无论发送什么端口,服务器永远只会回传第一个端口SYN+ACK的包
其他发送的都没有收到
void scan_port()
{
int raw_sock = init_connect();
init_buf();
for(int i=24443;i<=24445;i++)
{
tHeader->dest=htons(i);//目标端口
memcpy(sumBuf + sizeof(struct psdHeader), tHeader, TCP_HEADER_LEN);
printf("%d\n",htons(calcTCPCheckSum(sumBuf)));//校验和
tHeader->check = htons(calcTCPCheckSum(sumBuf));
memcpy(buf + IP_HEADER_LEN, tHeader, TCP_HEADER_LEN);
send(raw_sock,buf,totalLen,0);//发送
}
close(raw_sock);
}
刚开始我认为可能是校验和的问题,可我即使每次都计算校验和,结果还是没变
是因为校验和没有设置为0
应该是每循环一次都要设置为0
看看防火墙是不是打开了。