为什么WinPcap不能捕获外部的数据?

inwindcn 2003-09-12 05:37:09
局域内部的电脑ping我的电脑时,我监听自己的局域ip 192.168.1.x
可以截获数据包。
公司上网是ADSL拨号上网,每台电脑自己拨号上。
我监听用ipconfig得到的外部的ip是 61.x.x.x, 掩码255.255.255.255
可是就没有办法截获任何数据包。
谁能告诉我原因。。
...全文
126 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
visualabc 2003-09-23
  • 打赏
  • 举报
回复
可监控整个网络的包,IP包、非IP包
inwindcn 2003-09-20
  • 打赏
  • 举报
回复
我就一块网卡呀
kingzai 2003-09-19
  • 打赏
  • 举报
回复
你的机器有几块物理网卡?如果要用与拨号的话应该是两块,一块是内网,一块用于拨号,按道理绑定用与拨号那块网卡就可以监控到数据。
inwindcn 2003-09-19
  • 打赏
  • 举报
回复
大家可不可以继续关心一下呢????
inwindcn 2003-09-17
  • 打赏
  • 举报
回复
谢谢 kingzai(kingzai) 的关注,testapp也只发现一个设备,也就是本地的那个。

windbells(风铃)可以说的详细一点吗?
这方面我不大熟悉,有没有相关的参考书籍或者资料什么的。


windbells 2003-09-16
  • 打赏
  • 举报
回复
拨号后发出的数据包都是pppoe协议的包,对应的以太网桢类型,其中session包是8864,discovery包是8863,用winpcap可以监听到。
kingzai 2003-09-16
  • 打赏
  • 举报
回复
正确的应该是绑定PPP adapter,winpcap有两个例子有附带绑定网卡,有一个是testapp,你可以查看一下,如果他们也不能找到,证明是别的问题
inwindcn 2003-09-16
  • 打赏
  • 举报
回复
谢谢大家关心这个话题。
不过似乎大家没有完全明白我的问题,,

// Retrieve the device list
if (pcap_findalldevs(alldevs, errbuf) == -1)
这是winpcap的代码,可以获得本机的所有设备列表,可是在win2000运行过后,
这个列表只有1,也就是只发现一个设备
\Device\NPF_{XXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXXX}
Description: NDIS 5.0 driver

Loopback: no
Address Family: #2
Address Family Name: AF_INET
Address: 192.168.1.12
Netmask: 255.255.255.0
Broadcast Address: 255.255.255.255
可是用ipconfig,可以发现两个
C:\>ipconfig

Windows 2000 IP Configuration

Ethernet adapter 本地连接:

Connection-specific DNS Suffix . :
IP Address. . . . . . . . . . . . : 192.168.1.12
Subnet Mask . . . . . . . . . . . : 255.255.255.0
Default Gateway . . . . . . . . . :

PPP adapter Connection through Realtek RTL8139(A) PCI Fast Ethernet Adapter:

Connection-specific DNS Suffix . :
IP Address. . . . . . . . . . . . : xx.xxx.xxx.xxx
Subnet Mask . . . . . . . . . . . : 255.255.255.255
Default Gateway . . . . . . . . . : xx.xxx.xxx.xxx

我想知道为什么??是我什么地方没有注意,,
请大家继续讨论。。。。。。。。。。。谢谢
kingzai 2003-09-15
  • 打赏
  • 举报
回复
你要绑定正确的网卡才能截获到相应的数据包,你不妨找个sniffer工具先看一下。
kingzai 2003-09-15
  • 打赏
  • 举报
回复
你要绑定正确的网卡才能截获到相应的数据包,你不妨找个sniffer工具先看一下。
inwindcn 2003-09-15
  • 打赏
  • 举报
回复
但拨号后别人的包是不可能到达你的节点,但你能捕获到自己从Internet上访问到所有信息.

这点我也认为是这样。
但现在问题是:我用别人的电脑ping我的internet的IP 61.x.x.x ,一点信息也没有收到。
而且我访问internet时也没有截获任何信息。

用ipconfig可以发现两个设备,一个本地连接,还有一个是ppp adapter....
可是用winpcap编程实现时,只发现一个设备(win2000),是局域网的ip.
记得前一阵时间用win98时,好像发现了两个设备,不过当然没有注意到这个问题。。

我觉得应该得要找那个设备,监听,才能截获到数据,,,,
希望大家继续给我帮助。。。。
谢谢

netsys2 2003-09-15
  • 打赏
  • 举报
回复
的确是需要绑定指定的设备才能截获包,

你可以查考一下在WIN2000下的GUNIFFER。

下面是代码和EXE

http://asp.6to23.com/nowcan/code/guniffer.zip。

我一般用修改后的GUNIFFER,自己动手改更有趣。

在GUNIFFER代码中也没有指定网络适配器的功能,但可以简单地增加:
下面是我改过的代码

// 初始化SOCKET
iErrorCode = WSAStartup(MAKEWORD(2,1),&wsaData);
if( iErrorCode )
{
CheckSockError(iErrorCode, "WSAStartup");
return false;
}

// 获取本机名称
char FAR name[MAX_HOSTNAME_LAN];
iErrorCode = gethostname(name, MAX_HOSTNAME_LAN);
if( iErrorCode )
{
CheckSockError(iErrorCode, "gethostname");
return false;
}

// 利用得到的主机名去获得主机结构
LPHOSTENT lpHostEnt;
struct in_addr AdpAddr[30]; // 网络参数

lpHostEnt = gethostbyname(name);

// 从主机地址表中得到AdpAddr
for (int i=0; i<30; i++)
{
if( !lpHostEnt->h_addr_list[i] )
break;
memcpy(&AdpAddr[i],lpHostEnt->h_addr_list[i],sizeof(in_addr));
}

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

//创建原生的SOCKET
SockRaw = socket(AF_INET , SOCK_RAW , IPPROTO_IP);
if( SockRaw == INVALID_SOCKET )
{
CheckSockError(iErrorCode, "Create Socket");
return false;
}

// 绑定一块网卡
SOCKADDR_IN sa;
sa.sin_family = AF_INET;
sa.sin_port = htons(6000);
memcpy(&sa.sin_addr.S_un.S_addr,&AdpAddr[adpaterIndex],sizeof(in_addr));
// ^选择一块
iErrorCode = bind(SockRaw, (PSOCKADDR)&sa, sizeof(sa));
if( iErrorCode )
return false;
zhhuang2002 2003-09-14
  • 打赏
  • 举报
回复
因为局域网内数据包会到达各个节点,如果杂收就都能收到,但拨号后别人的包是不可能到达你的节点,但你能捕获到自己从Internet上访问到所有信息.
BCBChina 2003-09-13
  • 打赏
  • 举报
回复
不会,关注
kingzai 2003-09-13
  • 打赏
  • 举报
回复
yes, winpcap can sniffer LAN data,but can't sniffer dialuping data.
cwanter 2003-09-12
  • 打赏
  • 举报
回复
winpcap只能截获网卡上的数据包~

4,390

社区成员

发帖
与我相关
我的任务
社区描述
通信技术相关讨论
社区管理员
  • 网络通信
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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