请问在Winpcap中如何填充ethernet头中对端和本端的MAC地址呀?

No9 2005-01-08 10:48:14
请问在Winpcap中如何填充ethernet头中对端和本端的MAC地址呀?
我在内网中可以获取到对端的MAC地址,但如果在外网中怎么办?比如我想给sina发送一个TCP包,需要怎么填充ethernet头呀?
救急,非常感谢!
...全文
376 23 打赏 收藏 举报
写回复
23 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
horisly 2005-05-08
LEARNING
  • 打赏
  • 举报
回复
wyfcat 2005-05-06
mark
  • 打赏
  • 举报
回复
iorikingdom 2005-01-29
不行的话,我迟点开发一个开发包,可以这样发包的
  • 打赏
  • 举报
回复
iorikingdom 2005-01-29
winpcap支持WAN不是很好(个人认为),特别是Win9x和拨号环境,
你可以试着把这目的mac填位0看看,我记忆中某位高人说过这过是这样的,我没有试过。
  • 打赏
  • 举报
回复
No9 2005-01-24
我前面说了,在ADSL拨号时是没有网关的,网关就是本机。
比如分配给自己的动态IP地址是111.222.222.111,那么网关地址也是111.222.222.111;
我使用ipconfig命令或者API函数查看结果都是这样的。

大家都没有遇到ADSL的情况吗?
还有拨号上网的情况怎么办?
  • 打赏
  • 举报
回复
oyljerry 2005-01-21
是啊,应该就是adsl modem的网关
  • 打赏
  • 举报
回复
titihao 2005-01-21
ADSL的我就不清楚了,但我在局域网中的联外网(比方说是WWW.163.COM)时的目的MAC是网关的MAC地址,对了,你用ADSL拨号上网也应该有网关的呀,会不会你抓包的MAC地址就是网关地址?

你也可以试一下使用Tracert分析一下下一跳是哪里,
  • 打赏
  • 举报
回复
No9 2005-01-20
我早就抓包分析过了,无论目的地址是什么,里面填充的目的MAC地址都是一样的。
但不知道这是个什么MAC地址呀?
  • 打赏
  • 举报
回复
titihao 2005-01-20
你装一个Sniffer软件,抓两个封包研究一下就知道该如何填写了,我一般用IRIS抓包的。
  • 打赏
  • 举报
回复
titihao 2005-01-20
我是利用这种方法手动填写封包的方法发送以太网封包的.你可以参照TCP/IP协议去构造自己的封包。

u_char packet[42];


/* 获得网卡的列表 */
if (pcap_findalldevs(&alldevs, errbuf) == -1)
{
fprintf(stderr,"Error in pcap_findalldevs: %s\n", errbuf);
exit(1);
}

/* 打印网卡信息 */
for(d=alldevs; d; d=d->next)
{ printf("%d. %s", ++i, d->name,"(%s)\n"); }

if(i==0)
{
printf("\nNo interfaces found! Make sure WinPcap is installed.\n");
return -1;
}

inum=1;//设第一个网卡去发送封包//

/* 找到要选择的网卡结构 */
for(d=alldevs, i=0; i< inum-1 ;d=d->next, i++);

/* 打开选择的网卡 */
if ( (fp = pcap_open_live(d->name, // 设备名称
65536, // portion of the packet to capture.
// 65536 grants that the whole packet will be captured on all the MACs.
0, // 如果是 1就是混杂模式
1000, // 读超时为1秒
errbuf // error buffer
) ) == NULL)
{
fprintf(stderr,"\nUnable to open the adapter. %s is not supported by WinPcap\n");
pcap_freealldevs(alldevs); /* Free the device list */
return -1;
}

printf("\nSend...........by %s\n", d->description);

/* 假设网络环境为ethernet,我门把目的MAC设为1:1:1:1:1:1*/
packet[0]=0xFF;
packet[1]=0XFF;
packet[2]=0XFF;
packet[3]=0XFF;
packet[4]=0XFF;
packet[5]=0XFF;

/* 假设源MAC为 2:2:2:2:2:2 */
packet[6]=0x00;
packet[7]=0x06;
packet[8]=0x4d;
packet[9]=0xd8;
packet[10]=0x05;
packet[11]=0xc6;



..........
...........

{pcap_sendpacket( fp, //开始发送包....
packet,
42);
Sleep(40000);}


  • 打赏
  • 举报
回复
danielzhu 2005-01-18
UP
  • 打赏
  • 举报
回复
No9 2005-01-18
最后的老兄说的对,我研究几天终于得到这个结论。
但关键是如何填充这个“这跳的机器mac地址”??
请各位帮帮忙!
  • 打赏
  • 举报
回复
sharkhuang 2005-01-14
目的ip是不会变的。mac地址才是广播局域网的网关活着路由器!这跳的机器mac地址!最终才会是目的ip机器的地址
  • 打赏
  • 举报
回复
oyljerry 2005-01-12
本端用网卡的,对端用Modem的
  • 打赏
  • 举报
回复
No9 2005-01-12
本端MAC使用哪个呀?
对端MAC又使用哪个呀?
  • 打赏
  • 举报
回复
oyljerry 2005-01-11
ADSL猫有一个Mac地址,你网卡有一个Mac地址
  • 打赏
  • 举报
回复
oyljerry 2005-01-10
ADSL有一个外网地址的啊
通过内网和外网地址
  • 打赏
  • 举报
回复
No9 2005-01-10
ADSL拨号时是没有网关的,网关就是本机。
那样不是成自己发给自己了!这点好像和局域网不一样。
我的程序在局域网中运行也是正常的,填写的就是网关的MAC,但在ADSL环境中怎么办?
  • 打赏
  • 举报
回复
No9 2005-01-10
是的,ADSL建立后会分配一个动态的公网地址,但关键是在Winpcap中需要填充ethernet头,其中需要对端和本端的MAC地址,怎么填充呀?
  • 打赏
  • 举报
回复
oyljerry 2005-01-09
ip地址不会变,mac地址会发生变化
  • 打赏
  • 举报
回复
加载更多回复(3)
相关推荐
发帖
网络编程

1.8w+

社区成员

VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
帖子事件
创建了帖子
2005-01-08 10:48
社区公告
暂无公告