http://www.heibai.net/article/info/info.php?sessid=&infoid=23660
上述功能似乎用端口映射也能做的到,把A主机上的23端口重定向到80端口,再把B主机上的80端口重定向到23端口就行了。但如果B主机已经开启了WWW服务了呢?要使用上述功能,使用端口映射必须牺牲B主机的80端口,这是得不偿失的。试想在一次渗透防火墙的对某台主机的攻击中,把别人本来已经开启的WWW服务DOWN了,你还能在这台主机上呆多久?但是,使用http-tunnel就可以完美实现,即使B主机已经开放80,提供WWW,我们也照样可以发送telnet到其80端口上,享受到“正版”的telnet服务。
端口复用或者说劫持、重用都是一个意思。基本原理就是通过修改socket的属性SO_REUSEADDR来实现端口重绑定的。
setsockopt(s,SOL_SOCKET,SO_REUSEADDR,(char *)&val,sizeof(val)
然后bind(s,(SOCKADDR *)&saddr,sizeof(saddr) 这里的saddr.sin_addr.s_addr =ip; saddr.sin_port = htons(80); 要劫持的端口
之后原80端口的数据你都可以accpet,recv了。需要注意的是如果接收到的数据是自己的包,就可以进行一些特殊处理,不是的话通过127.0.0.1进行转发。
不知道这样写大家看得明白不,如果不明白的话多半是基础还不够好,需要好好恶补一下课的哈!~