如何从旁路控制一个网络流量具体实现?

szclm 2004-03-22 04:04:26
之前我问过这个问题:

http://expert.csdn.net/Expert/topic/2817/2817741.xml?temp=.8323328

经大家的推荐实现了tcmp源站抑制差错type = 4, code = 0的流量控制程序,

自己构造tcmp包,根据要限制的IP地址构造的,具体程序如下:
//使用winpcap库
//uIpData 是网络上的原始数据包
void CTestICMPDlg::MakeICMP( UCHAR *uIpData )
{
//构建一个区域,来保存icmp包
UCHAR uTmpIcmp[2048] = "";
memset( uTmpIcmp, 0 , 2048 );
Packet *src_p = new Packet, *dst_p = new Packet;
dst_p->pkt = uTmpIcmp;
src_p->pkt = uIpData;
dst_p->eh = (EtherHdr*)uTmpIcmp;
src_p->eh=(EtherHdr*)uIpData;
//处理链路层数据
memcpy( dst_p->eh->ether_dst, src_p->eh->ether_src, 6 ); //将mac目->源
memcpy( dst_p->eh->ether_src, src_p->eh->ether_dst, 6 ); //将mac源->目
dst_p->eh->ether_type = src_p->eh->ether_type;
//处理IP包数据
if( src_p->eh->ether_type== ETHERNET_TYPE_IP)
{
src_p->iph=(IPHdr*)(src_p->pkt+ETHERNET_HEADER_LEN);
dst_p->iph=(IPHdr*)(dst_p->pkt+ETHERNET_HEADER_LEN);
//只对tcp和udp包抑制
if( src_p->iph->ip_proto == IPPROTO_TYPE_TCP ||
src_p->iph->ip_proto == IPPROTO_TYPE_UDP )
{
//复制ip信息
dst_p->iph->ip_dst = src_p->iph->ip_src;
dst_p->iph->ip_src = src_p->iph->ip_dst;
dst_p->iph->ip_ver = src_p->iph->ip_ver;
dst_p->iph->ip_hlen = 5;
dst_p->iph->ip_tos = 0;
dst_p->iph->ip_len = 0x3800;
dst_p->iph->ip_id = 0x5144;
dst_p->iph->ip_csum = 0;
dst_p->iph->ip_proto = 1;
dst_p->iph->ip_ttl = 128;
dst_p->iph->ip_csum = checksum( (USHORT *)(dst_p->pkt+ETHERNET_HEADER_LEN), 20 );//效验
//设置ICMP信息
dst_p->icmph=(ICMPHdr*)(dst_p->pkt+ETHERNET_HEADER_LEN+dst_p->iph->ip_hlen*4);
dst_p->icmph->code = 0;
dst_p->icmph->type = 4;
dst_p->icmph->csum = 0;
//拷贝原始包的ip首部和数据的前8个字节
memcpy( dst_p->pkt+ETHERNET_HEADER_LEN+dst_p->iph->ip_hlen*4 + 8, src_p->pkt+ETHERNET_HEADER_LEN, 32 );
//计算效验和
dst_p->icmph->csum = checksum( (USHORT *)(dst_p->pkt+ETHERNET_HEADER_LEN), 56 );
//发送这个包
pcap_sendpacket( fp, uTmpIcmp, 70 );
}
}
if( src_p != NULL )
delete src_p;
if( dst_p != NULL )
delete dst_p;
}

现在发现这个方法达不到效果!

请问大家还有其它的方法吗?或是我的运用上有问题呢?
...全文
332 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
快乐鹦鹉 2004-03-23
  • 打赏
  • 举报
回复
呵呵,我对网络编程不太了解。帮不了你哦。
szclm 2004-03-23
  • 打赏
  • 举报
回复
这个真是做不到的吗?
szclm 2004-03-22
  • 打赏
  • 举报
回复
我的TCMP包是没有错的!我是指它的作用没有体现出来!

我的意思是说:我想让局域网里的一台机子的流量变慢~

不知还有什么方法呢?
flinming 2004-03-22
  • 打赏
  • 举报
回复
还有付值的时候你应该注意高低为的转换。。。。。。。。
flinming 2004-03-22
  • 打赏
  • 举报
回复
自己组icmp包不可以么。。。我做的都可以

//////////////////////////////////////////////////////////////////////////
//icmp结构
struct icmp //包含在IP包中,是IP的上层为0X01的应用
{
WORD head[7]; //以太网头
WORD iphead[10]; //IP头
unsigned char type; //0X08 PING请求 0X00 PING应答
unsigned char option; //0X00 PING
WORD crc;
WORD id;
WORD seq;
unsigned char icmpdata[MY_MAX_SEGMENT_SIZE];
};
szclm 2004-03-22
  • 打赏
  • 举报
回复
唉——我倒!上CSDN问问题,总是有点让人失望!

18,363

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧