coolksj
驱动牛犊
驱动牛犊
  • 注册日期2002-06-17
  • 最后登录2018-05-29
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望10点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1261回复:5

请一定帮帮我.代码问题

楼主#
更多 发布于:2002-06-19 21:17
上一次请问了如何发送自定义的IP包,有人告诉我使用Packet32.dll
我用了.是成功了,由于没有详细的资料,碰到一个奇怪的问题.
在调用PacketSendPacket function 时,如果Packet->buffet=\"abcd\"
这样的正常字符发送,我可以在网络监视器中查到.
但如果13Packet->buffet=\"\\0x0a\\0x54\\0x20\\0x00\\0x68\\0x99\"这样的含有特殊字符,在网络监视器中就截不到了?

这是为什么?构建一个IP包里面不是有很多特殊字符吗?我想一定是还有什么需要设置的或是别的什么,但是没有足够的资料,我不知道需要怎么做,希望大家能够帮帮我.
没有什么可说的
magicx
驱动老牛
驱动老牛
  • 注册日期2002-02-22
  • 最后登录2014-08-18
  • 粉丝1
  • 关注0
  • 积分-14分
  • 威望13点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2002-06-20 03:02
上一次请问了如何发送自定义的IP包,有人告诉我使用Packet32.dll
我用了.是成功了,由于没有详细的资料,碰到一个奇怪的问题.
在调用PacketSendPacket function 时,如果Packet->buffet=\"abcd\"
这样的正常字符发送,我可以在网络监视器中查到.
但如果13Packet->buffet=\"\\0x0a\\0x54\\0x20\\0x00\\0x68\\0x99\"这样的含有特殊字符,在网络监视器中就截不到了?

这是为什么?构建一个IP包里面不是有很多特殊字符吗?我想一定是还有什么需要设置的或是别的什么,但是没有足够的资料,我不知道需要怎么做,希望大家能够帮帮我.


以下为乱猜:

你查的时候。。。。是当字符串还是二进制?

是否考虑过“\\”的转义?

 :D
[color=red]大头鬼! :P[/color]
coolksj
驱动牛犊
驱动牛犊
  • 注册日期2002-06-17
  • 最后登录2018-05-29
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望10点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2002-06-20 09:04
我是用W2K自带的网络监视器查的,他可以截取本机发送和接收的包,可是我没有办法找到我的包,可能是改成了特殊字符以后,就没有发送出去了.但是PacketSendPacket 返回的是TRUE.我真不知道是什么原因.
发送代码如下:
LPADAPTER   lpAdapter = 0;
LPPACKET    lpPacket;
LPTSTR astr;
LPCTSTR LASTR;
char buffer[256000];  // buffer to hold the data coming from the driver

if(m_Adapter.GetCurSel()<0){this->MessageBox(\"请您选定一块网络适配器!!\");return;}
this->m_Adapter.GetText(m_Adapter.GetCurSel(),v_Adapter);
astr=(LPTSTR)this->v_Adapter.GetBuffer();
//LASTR=this->v_Adapter.GetString();
//this->MessageBox(LASTR);

lpAdapter=PacketOpenAdapter(astr);
if (!lpAdapter || (lpAdapter->hFile == INVALID_HANDLE_VALUE))
{
this->MessageBox(\"Error Select Adapter\");
return;
}

if(PacketSetMode(lpAdapter,0)==FALSE){  //我不知道有什么Mode,只知道0,1可选,也不知道有什么作用,但是有没有这一句都一样
this->MessageBox(\"Set Adapter Mode Error!\");
return;
}

if(PacketSetBuff(lpAdapter,512000)  ==FALSE){  //这一句也不知道有没有用
this->MessageBox(\"Unable to set the kernel buffer!\");
return;
}

if((lpPacket = PacketAllocatePacket())==NULL){ //分配Packet
printf(\"\\nError: failed to allocate the LPPACKET structure.\");
}
PacketInitPacket(lpPacket,(char *)buffer,256000); //初始化Packet

lpPacket->Length=55;
char buftest[1024],
buftest[0]=\'\\x00\';buftest[1]=\'\\x0A\';buftest[2]=\'\\xAA\';buftest[3]=\'b\';buftest[4]=\'b\';
lpPacket->Buffer=buftest;
if(PacketSendPacket(lpAdapter,lpPacket,TRUE)==FALSE) //发送数据
{
this->MessageBox(\"Error Send Data\");
}

//释放Packet
PacketFreePacket(lpPacket); //关闭适配器
PacketCloseAdapter(lpAdapter);

以下代码在VC.net for Xp 上测试通过.可是发不出去

如果把以上两句修为
lpPacket->Length=4;
lpPacket->Buffer=\"abcd\"
则可以发送出去,在网络监视器中能够截取到有信息\"abcd\"发送.

[编辑 -  6/20/02 by  coolksj]
没有什么可说的
coolksj
驱动牛犊
驱动牛犊
  • 注册日期2002-06-17
  • 最后登录2018-05-29
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望10点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2002-06-20 09:55
再补充一下
经过多次测试,发现只有当buftest[0]=\'a\' 或 buftest[0]=\'\\x61\'
的时候可以发送出去(其它的可以任意字符),其它的都不能发送.

这是为什么?


[编辑 -  6/20/02 by  coolksj]
没有什么可说的
coolksj
驱动牛犊
驱动牛犊
  • 注册日期2002-06-17
  • 最后登录2018-05-29
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望10点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2002-06-20 18:37
怎么没有人回答呢?

这个问题太笨了?帮帮忙嘛,我也是不得以,如果有选择的话,我情愿选择翻几晚上的书找答案.

帮帮我吧.
没有什么可说的
coolksj
驱动牛犊
驱动牛犊
  • 注册日期2002-06-17
  • 最后登录2018-05-29
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望10点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2002-06-20 18:37
怎么没有人回答呢?

这个问题太笨了?帮帮忙嘛,我也是不得以,如果有选择的话,我情愿选择翻几晚上的书找答案.

帮帮我吧. :( :(
没有什么可说的
游客

返回顶部