如何向本机网卡发送网络数据?

无聊客 2008-06-23 02:12:26
我在客户设备上用Wincap抓了他们的数据流文件,现在我需要在另外一台设备上模拟这些数据流到的环境,我初步的想法是先打开Wincap的数据文件,读取原始数据,然后通过某种手段模拟发到设备的网卡上,通过wincap抓取文件已经实现,不知道各位大虾有没有什么办法能够模拟向本机网卡发送网络数据包(应该是IP包吧),谢谢!
...全文
540 20 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhongrihan2008 2011-10-04
  • 打赏
  • 举报
回复
用127.0.0.1这方法是最简单的!!
dongw1023 2008-08-28
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 Alex_1985f 的回复:]
引用 7 楼 CathySun118 的回复:
对socket来说,只关心对方的ip和端口,根本不关是不是本机



此话有理,只是通信的时候,保证通信的端口号不同
[/Quote]
en...
yuzhouzhichong 2008-08-28
  • 打赏
  • 举报
回复
直接用UDP广播三:

char broad=0x57;
SOCKET sock
sockaddr_in addr;
bool op=1;
if(sock!=NULL)
{
closesocket(sock);
sock=NULL;
}
if(sock==NULL)
{
sock=socket(AF_INET,SOCK_DGRAM,0);
ASSERT(sock!=NULL);
}
addr.sin_family=AF_INET;
addr.sin_addr.S_un.S_addr=INADDR_ANY;
addr.sin_port=htons(8000);
int ret=0;
ret=bind(sock,(LPSOCKADDR)&addr,sizeof(addr));
if(ret==SOCKET_ERROR)
{
DWORD dw=GetLastError();
AfxMessageBox("绑定错误!");
closesocket(sock);
return false;
}


if(SOCKET_ERROR==setsockopt(sock,SOL_SOCKET,SO_BROADCAST,(char *)&op,sizeof(bool)))
AfxMessageBox("无法进行UDP广播");
addr.sin_family=AF_INET;
addr.sin_addr.S_un.S_addr=INADDR_BROADCAST;
addr.sin_port=htons(1021);
sendto(sock,&broad,sizeof(broad),0,(sockaddr *)&addr,sizeof(addr));


WSAAsyncSelect(m_hSocket,m_hWnd,CLI_MSG,FD_READ | FD_CLOSE)

然后在CLI_MSG消息中直接收即可!
  • 打赏
  • 举报
回复
socket发送到127.0.0.1
wanbangxinji 2008-08-28
  • 打赏
  • 举报
回复
如果用于模拟的设备接入网络的话,照常用socket通信即可,在本机开个端口监听,然后用另一个socket发包。
或者装个虚拟机,模拟2台主机的通信,虚拟机的网卡设置成“桥接”模式
dirdirdir3 2008-08-27
  • 打赏
  • 举报
回复
楼主的意思应该是建立了与远程的连接,然后本机上模仿远程的连接向本机的同一个端口发数据吧.
应该没有现成的函数实现,可以试试向socket的缓冲区写入数据.要不就要动驱动的主义了..............
greatws 2008-08-27
  • 打赏
  • 举报
回复
destMAC改成你自己那张网卡的,然后直接发就行了
qq_sugar 2008-08-27
  • 打赏
  • 举报
回复
直接通过winpcap在指定网卡上发包就可以了。
先可以通过winpcap把需要模拟的数据包存储下来,然后通过winpcap在本机的网卡上发送这些报文就可以了,和通过其他设备真实发包一样。
当然要是这些数据包中有交互报文就比较麻烦了,需要自己进行协议交互处理。



Wenxy1 2008-08-27
  • 打赏
  • 举报
回复
发送数据到环回接口就OK了。
chenjiq 2008-06-25
  • 打赏
  • 举报
回复
socket 发送到127.0.0.1,本机就可以收到了
自由的风 2008-06-25
  • 打赏
  • 举报
回复
只在本机上面,想把数据在网卡级别上进行调度,而又只是用sockAPI编程的话,不可能。
圣陶沙 2008-06-24
  • 打赏
  • 举报
回复
用Socket就可以
Alex_1985f 2008-06-24
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 CathySun118 的回复:]
对socket来说,只关心对方的ip和端口,根本不关是不是本机
[/Quote]


此话有理,只是通信的时候,保证通信的端口号不同
CathySun118 2008-06-23
  • 打赏
  • 举报
回复
对socket来说,只关心对方的ip和端口,根本不关是不是本机
baggiocici 2008-06-23
  • 打赏
  • 举报
回复
如果用于模拟的设备接入网络的话,照常用socket通信即可,在本机开个端口监听,然后用另一个socket发包。
或者装个虚拟机,模拟2台主机的通信,虚拟机的网卡设置成“桥接”模式
DarknessTM 2008-06-23
  • 打赏
  • 举报
回复
socket通信说白了就是进程间通信,至于是 本机进程间还是远程进程间,一般关系不大……
scq2099yt 2008-06-23
  • 打赏
  • 举报
回复
自己写一个发数据的客户端不就可以了
无聊客 2008-06-23
  • 打赏
  • 举报
回复
自己顶下,客户需要,只能本机
cwc270 2008-06-23
  • 打赏
  • 举报
回复
用两台电脑吧,最符合实际情况了。
pingguowuai 2008-06-23
  • 打赏
  • 举报
回复
广播的话,应该自己也能接受到吧。

18,363

社区成员

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

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