当前位置:  技术问答>linux和unix

发送IP包时,skb->dev是在哪里被设置的

    来源: 互联网  发布时间:2017-01-16

    本文导语:  我想在linux下实现一个虚拟的网卡设备,自己实现一个struct net_device,从IP层接收IP包. 我知道ip向下层发送数据时,是调用dev_queue_xmit(struct sk_buff *skb)来实现的,但在调用这个函数前,skb中的dev已经被设置好了,我想请教一下,这个skb->de...

我想在linux下实现一个虚拟的网卡设备,自己实现一个struct net_device,从IP层接收IP包.
我知道ip向下层发送数据时,是调用dev_queue_xmit(struct sk_buff *skb)来实现的,但在调用这个函数前,skb中的dev已经被设置好了,我想请教一下,这个skb->dev是在什么时候被设置的,如果我要让这个包发送到我的虚拟设备上,需要怎么做?
谢谢

|
这个是在ip层的时候,检查路由的时候设置上去的,应该是系统检测目标ip,根据路由表查找需要从哪个device出去,然后就设置这里的路由;

 308int ip_output(struct sk_buff *skb)
 309{
 310        struct net_device *dev = skb_dst(skb)->dev;
 311
 312        IP_UPD_PO_STATS(dev_net(dev), IPSTATS_MIB_OUT, skb->len);
 313
 314        skb->dev = dev;
 315        skb->protocol = htons(ETH_P_IP);
 316
 317        return NF_HOOK_COND(NFPROTO_IPV4, NF_INET_POST_ROUTING, skb, NULL, dev,
 318                            ip_finish_output,
 319                            !(IPCB(skb)->flags & IPSKB_REROUTED));
 320}




如果仅仅是为了测试,可以用 route 命令设置一下路由,让指定的目标ip的包从你的device出去。

然后随便 ping一下指定ip就可以测试了。 


|
"当路由要发送一个包时,发现该包的地址不在路由表中",这个时候会使用默认的路由选项,即默认的端口把包送出去。

“如果从dev1中收到该包的回应,就会在路由表中建立该项,以后发往该地址的包就会从dev1中发送.”,这句话说的不对。收包时记录路由表,它可不知道什么“回应”。发包时查路由表,看目的IP是否在路由表上已存在。

    
 
 

您可能感兴趣的文章:

  • 设置发送缓冲区bufsize大小失败?
  • linux下需要设置网络发送和接受缓冲区大小时,需如何设置,是否系统有最大缓冲区限制?谢谢
  • 当邮件服务器设置了身份验证时,邮件发送程序返回 SMTP 550 错误时怎么解决?
  • UDP协议在实现时有没有在发送端或者接收端设置缓冲区?
  • 高分求助(今天结帐):怎样设置自己的smtp发送javamail?
  • 在solaris10下,如何才能正确的进行相关设置后,调用sendmail来发送一封邮件?(外部邮箱)
  • linux转发数据,局域网A(eth1)的数据是如何发送到另一个网卡eth0所在的网络上的,只需要设置FORWARD的ACCEPT吗?
  • Sendmail问题:在本机安装Sendmail后,可以用本机的mail程序发邮件,但是一修改sendmail.cf中的SMTP设置就不能发送!
  • iptables 如何设置能够将发送到本服务器80端口上的请求转发到另一IP上?
  • 我是刚安装的LINUX,我该怎样设置才能让我的mail命令生效阿?? 就是可以发送一份邮件!
  • 用JAVAMAIL发邮件时,如何设置邮件发送者的姓名?
  • linux脚本实现自动发送和收取邮件的设置方法
  • 请问发送数据成功后返回的ack是在内核的什么地方处理的?
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • HTTP协议发送请求详解
  • 我想让内核向网卡发送数据时,不是立即发送,而是等我允许时再发送
  • TCP发送数据,假如发送套接口是非阻塞的,而要发送的数据大于缓冲区尺寸
  • socket发送端、接收端同一机器,kill掉接收端进程,发送端也被kill?
  • *** 高分, 请问如何发送一个事件, 比如发送一个Tab键? ***
  • 谁知道minicom监控VT100终端时候发送"F1"键是发送的什么转义字符呢?
  • 有没有谁实现了向IE浏览器那种“发送网页(P)”,把完整html格式发送给相应email?
  • 用sendto(socket, buf, strlen(buf), ...)发送一个包,如何得到发送的源地址(也就是本机的源地址)
  • postfix 在内网可以正常接收与发送邮件,但向局外,不能接收与发送
  • 串口应用程序,当对方发送大量的数据时,本方的数据无法发出。对方停止发送,本方的数据仍然无法发出。不知道是什么原因。
  • sendmail,内部发送接收可以,当用外部的域名,无法发送和接收,如163账号。
  • 如何将数据库里边的长度超过65535的数据打包发送发送?
  • 同多个线程通过同一个socket发送数据,操作系统底层会同步每个发送操作吗
  • 求助,udp文件传输发送端发送完了,接收端却接受到一半就bad address?
  • 通过短信发送LOG归类号码发送情况的shell脚本
  • 怎么用sendmail发送纯文本邮件,无论中英文都可显示,但如改用发送html格式的邮件,即message.setContent("Hello,this is content,后面
  • 数据包通过dev_queue_xmit发送出去,dev_queue_xmit返回值为0,但是对方收不到数据包 ,本机也抓不到发送出去的包
  • 请问在netfilter的forward点上怎么将原来从eth0发送的数据包转向由eth1发送啊?
  • 我调用socket向外发送消息,为什么在发送的同时,会打印字符串到屏幕上
  • 怎样编程发送广播包?我的这段程序发送怎么返回值总是-1?
  • 使用perl发送带有附件的电子邮件是什么原理呀?不带附件得我已经发送成功了,希望指点


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3