LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
楼主: ilw10000

用recv可以收到整个数据包,但怎么才能把这个包发送出去呀???????

[复制链接]
 楼主| 发表于 2005-8-4 13:33:38 | 显示全部楼层
socket是可以绑定的,可是我要发的是raw 包.可能不是我的ip怎么绑定呀????
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-8-4 13:37:12 | 显示全部楼层
to : dancingpig
    发的是 raw 包,ip层的东西都是在packet里的,
    可以用函数自己选择吗?????
回复 支持 反对

使用道具 举报

发表于 2005-8-7 22:01:45 | 显示全部楼层
Post by zxb
socket创建后不是要绑定吗?socket绑定了那个IP就用那张网卡发出去吧
如果从一个socket收从另一个发出去,就要用到两个绑定不同IP的socket了吧

bind函数?这个是在绑到地址和端口上的,如果他是client不需要啊
回复 支持 反对

使用道具 举报

发表于 2005-8-7 22:02:55 | 显示全部楼层
raw的还真没详细研究过,看是看过的,unp有章节就是说raw的你需要去看看
我最多也就写写应用层的了,目前位置
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-8-8 09:13:58 | 显示全部楼层
to : dancingpig
  很感谢你!!
  你说的unp是什么呀? 是unix network program吗?
回复 支持 反对

使用道具 举报

发表于 2005-8-9 03:00:17 | 显示全部楼层
udp,raw这些socket几乎都可以调用bind函数,只不过意义更tcp的不大一样.
下面是一个raw socket的例子:

#include <sys/types.h>
#include <sys/socket.h>
#include <linux/if_ether.h>
#include <linux/if_packet.h>
#include <netinet/in.h>
#include <strings.h>
#include <stdio.h>
#include <stdlib.h>

static char buffer[1600];

int main(void)
{
        int fd, n;
        struct sockaddr_ll addr;
        bzero(&addr, sizeof(addr));
        addr.sll_family = AF_PACKET;
        addr.sll_ifindex = 2;
        if((fd = socket(AF_PACKET, SOCK_DGRAM, htons(ETH_P_IP))) < 0)
                return EXIT_FAILURE;
        if(bind(fd, (struct sockaddr *)&addr, sizeof(addr)) < 0)
                return EXIT_FAILURE;
        while((n = recv(fd, buffer, 1600, 0)) >= 0)
                printf("Recv from link %i bytes\n", n);
        return EXIT_SUCCESS;
}
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-8-9 09:15:46 | 显示全部楼层
to : daemeon
    我知道都可以绑定,我是想在绑定的时候能自己选择要绑定的网卡,比如我有两个网卡. 用一个网卡来收包 ,用另一个网卡来发包 .  你有这方面的例子吗 ?
    还是很感谢你的, 热心高手!!!!!!!
回复 支持 反对

使用道具 举报

发表于 2005-8-9 13:52:09 | 显示全部楼层
Post by ilw10000
to : daemeon
    我知道都可以绑定,我是想在绑定的时候能自己选择要绑定的网卡,比如我有两个网卡. 用一个网卡来收包 ,用另一个网卡来发包 .  你有这方面的例子吗 ?
    还是很感谢你的, 热心高手!!!!!!!


上面例子的:
addr.sll_ifindex = 2;
不就是bind网卡的。网卡的index可以通过ip link来查看.
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-8-9 16:31:28 | 显示全部楼层
to : daemeon
     谢谢你了,我没用过这样的.这就是说我也可以任意选用哪个网卡接收数据了,是这样吗??
谢谢了!!!!!!!!!!!
回复 支持 反对

使用道具 举报

发表于 2005-8-9 18:15:48 | 显示全部楼层
是的,可以任意选收发数据的网卡.
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表