精华内容
下载资源
问答
  • 电脑网络连接失败 网卡只有发送没有接收该怎么办?电脑没法上网,网线和网络都没有问题,就是测试发现有发送包但接收包为0,该怎么办呢?下面分享解决办法,需要的朋友可以参考下
  • 介绍网卡的接受和发送过程,对网卡驱动编写提供参考
  • 1.先连接千兆网口 2.高级设置里面有个记住网口 打钩 3.发送参数发送接收卡以及保存到接受卡里面 左上角选择千兆网口 并完成显示屏连接 发送接收卡以及保存接收
  • C语言实现ifconfig获取网卡接收发送流量统计
                   

    在Windows下我们可以利用ipconfig命令获取网卡的相关信息,在Linux下命令是ifconfig

    我们可以获取的信息更为丰富,其中包括网卡接收和发送的流量,用C语言实现这个命令并不是一件简单的事,由此,博主经查阅相关资料,得知,网卡的相关信息保存在 /proc/net/dev  这个文件夹下,所以,我们可以通过读取这个文件里的信息获取相应网卡的信息。

    这个文件包含四部分内容,分别是:发送包的个数,发送的流量,接收包的个数,接收的流量,同时,由于网络环境在不断的变化之中,所以,这个文件的内容也是在实时更新的。

    下面这张图片显示的是 ifconfig 命令的实现结果


    注意,其中有许多参数,这些参数并不保存在文件中

    下面是博主实现的一段C语言代码获取接收和发送的流量

    重要的地方已经给出了注释

    #include <stdio.h>#include <string.h>#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>#include <unistd.h>#include <stdlib.h>long *my_ipconfig(char *ath0){        int nDevLen = strlen(ath0);    if (nDevLen < 1 || nDevLen > 100)    {        printf("dev length too long\n");        return NULL;    }    int fd = open("/proc/net/dev", O_RDONLY | O_EXCL);    if (-1 == fd)    {        printf("/proc/net/dev not exists!\n");        return NULL;    }            char buf[1024*2];        lseek(fd, 0, SEEK_SET);        int nBytes = read(fd, buf, sizeof(buf)-1);        if (-1 == nBytes)        {            perror("read error");            close(fd);            return NULL;        }        buf[nBytes] = '\0';        //返回第一次指向ath0位置的指针        char* pDev = strstr(buf, ath0);        if (NULL == pDev)        {            printf("don't find dev %s\n", ath0);            return NULL;        }        char *p;        char *ifconfig_value;        int i = 0;        static long rx2_tx10[2];  /*去除空格,制表符,换行符等不需要的字段*/        for (p = strtok(pDev, " \t\r\n"); p; p = strtok(NULL, " \t\r\n"))        {      i++;      ifconfig_value = (char*)malloc(20);      strcpy(ifconfig_value, p);   /*得到的字符串中的第二个字段是接收流量*/      if(i == 2)      {       rx2_tx10[0] = atol(ifconfig_value);      }   /*得到的字符串中的第十个字段是发送流量*/      if(i == 10)      {       rx2_tx10[1] = atol(ifconfig_value);       break;      }      free(ifconfig_value);    }    return rx2_tx10;}int main()long *ifconfig_result; double re_mb;  /*eth0 是博主计算机上的网卡的名字*/ ifconfig_result = my_ipconfig("eth0");  /*保存在文件中的数值的单位是B,经过计算换算成MB*/    re_mb = (double)ifconfig_result[0]/(1024*1024);    printf("接收流量:%0.2f MB\n",re_mb);     /*保存在文件中的数值的单位是B,经过计算换算成MB*/    re_mb = (double)ifconfig_result[1]/(1024*1024);    printf("发送流量:%0.2f MB\n",re_mb); }

    保存文件的名字为 dele.c

    运行相关的命令:

    gcc -o dele dele.c

    ./dele

    得到结果如下图所示


    由此得到了网卡的接收和发送流量

               
    展开全文
  • linux网卡数据流 发送与接收

    千次阅读 2014-09-03 21:34:11
    通常在驱动中看见的网卡代码很多,但是都离不开发送与接收,掌握好骨干也就好阅读网卡驱动了。 数据发送 : 发送函数:xxx_start_xmit() 上层封装好了sk_buff丢进kernel后,buf存储在skb->data中,通 过 xxx_...


    通常网卡驱动代码量比较大,但是都离不开发送与接收,掌握好骨干也就好理解与调试了。


    数据发送 :

    发送函数:xxx_start_xmit()

    上层封装好了sk_buff丢进kernel后,buf存储在skb->data中,通 过 xxx_start_xmit(),发送出去。
    下面的实例是通过写入某个设备节点发送出去,当然这个设备肯定是串口或者sdio等传输设备,
    也可以直接调用写入函数将buf送出去。


    比如sdio的写入:
    sdio_memcpy_toio(xxx->func, addr, buf, sizeof(buf));

    net_device_ops结构体的填充,在里实现了open与发送等操作:

    static const struct net_device_ops xxx_netdev_ops = {
        .ndo_open = xxx_net_open,
        .ndo_stop = xxx_net_stop,
        .ndo_start_xmit = xxx_start_xmit,
        .ndo_get_stats =  xxx_get_stats,
        .ndo_tx_timeout = xxx_tx_timeout,
    };
    
    
       static int xxx_start_xmit(struct sk_buff *skb, struct net_device *dev){
    
       ---------
        nwrite = filep->f_op->write(filep, skb->data, skb->len, &filep->f_pos);
        set_fs(old_fs);
    
        if (nwrite == skb->len) {
            priv->stats.tx_packets++;
            priv->stats.tx_bytes +=skb->len;
            priv->netdev->trans_start = jiffies;
        }
        -----------
    }
    

    数据接收:

         目前我所看到的接收触发都是在中断(低速串口与sdio card)里面读取到buf后异步调用netif_rx()提交到网络栈,
    对于sdio card的接收数据是host端接收到中断后调用到card里面的中断处理函数而读取buf的。另外一种就是软中断来接收,
    比如usb与高速串口的数据接收。
    netif_rx()是标准的网卡上交sk_buff数据流,通常网卡驱动代码量很大当你找不到接收函数时,搜netif_rx()是最 好的 选择。



    下面接收处理函数:首先分配skb数据空间,再将读取的buf存入skb中,再调用netif_rx(),数据报入网络栈。

    static int xxx_submit_skb(void *data)
    {
        --------
        skb = netdev_alloc_skb(ndev, pkt_len + NET_IP_ALIGN); /* NET_IP_ALIGN is 2 */
        if (!skb) {
            printk(KERN_INFO "error: out of memory for rx'd frame\n");
            priv->stats.rx_dropped++;
            ret = -ENOMEM;
            goto error;
        } 
    
        skb_reserve(skb, NET_IP_ALIGN);
    
        memcpy((skb_put(skb, pkt_len), pkt_len),buf,sizeof(buf);
        
        skb->dev = priv->netdev;
        skb->protocol = eth_type_trans(skb, priv->netdev);
        priv->stats.rx_packets++;
        priv->stats.rx_bytes += pkt_len;
        ret = netif_rx(skb);
        if (ret != 0)
            printk(KERN_INFO "%s: netif_rx error\n", __func__);
    
        --------
    }
    



    展开全文
  • 网卡分别接收发送组播

    千次阅读 2016-07-12 16:20:46
    有两套相同的系统(内部IP全部相同),使用两个设备(双网卡)分别接入两套系统,实现两套系统间组播信息互传 SystemA: 192.168.11.26(内网) 192.168.12.26(外网) 现在使用192.168.11.26接收内网的组播,并且使用...

    有两套相同的系统(内部IP全部相同),使用两个设备(双网卡)分别接入两套系统,实现两套系统间组播信息互传

    SystemA: 192.168.11.26(内网) 192.168.12.26(外网)

    现在使用192.168.11.26接收内网的组播,并且使用192.168.12.26发出去

    接收(此接收会产生丢包现象,测试程序没有处理):

    private string iIp = ConfigurationManager.AppSettings["iIp"];
    private string oIp = ConfigurationManager.AppSettings["oIp"];

    private void StartReceive()
            {
                try
                {
                    IPEndPoint ip = new IPEndPoint(IPAddress.Parse(iIp), port);
                    Udp = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
                    Udp.Bind(ip);
                    Udp.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.AddMembership, new MulticastOption(IPAddress.Parse(ipStr), IPAddress.Parse(iIp)));
    
                    IPEndPoint sender = new IPEndPoint(IPAddress.Any, 0);
                    EndPoint remote = (EndPoint)sender;
    
                    byte[] data;
                    while (isReceive)
                    {
                        try
                        {
                            data = new byte[1024];
                            int receiveLength = Udp.ReceiveFrom(data, ref remote);
    
                            DoReceive(data, receiveLength);
                        }
                        catch (ThreadAbortException abort)
                        {
                            return;
                        }
                        catch (Exception ex)
                        {
                            continue;
                        }
                    }
                }
                catch (Exception ex)
                {
                    Error(ex);
                }
            }
    发送:

    private void SendMulticast(byte[] data)
            {
                using (Socket server = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp))
                {
                    IPEndPoint ipLocal = new IPEndPoint(IPAddress.Parse(oIp), MulticastPort);
                    server.Bind(ipLocal);
                    IPEndPoint ip = new IPEndPoint(IPAddress.Parse(MulticastIP), MulticastPort);
                    server.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.AddMembership, new MulticastOption(IPAddress.Parse(ipStr), IPAddress.Parse(oIp)));
                    server.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.MulticastTimeToLive, 1);
                    server.Connect(ip);
                    server.SendTo(data, data.Length, SocketFlags.None, ip);
                }
            }



    展开全文
  • 网卡只有发送,没有接收

    千次阅读 2015-07-26 21:18:32
    前天有台服务器突然网络不通了,网络显示已连接,设的固定IP,无法ping通,改成...3.换网卡,这台服务器上有3块网卡,也没用 4.检查内存,以前碰到过服务器内存有问题导致网络不同,问题依旧 5.开始考虑是系统

    前天有台服务器突然网络不通了,网络显示已连接,设的固定IP,无法ping通,改成自动获取,无法获取到IP。

    1.重启服务器,以前碰到过类似情况,重启一下就好了,重启后问题依旧

    2.检查网线,把旁边另外一台服务器的网线临时拔过来插了一下,也没用

    3.换网卡,这台服务器上有3块网卡,也没用

    4.检查内存,以前碰到过服务器内存有问题导致网络不同,问题依旧

    5.开始考虑是系统出了问题,把系统恢复到了前几天的备份,问题依旧

     

    到这里有点纳闷了,开始怀疑备份是不是也有问题,想着不行就重新做系统了

    但还是不甘心,上网查了一下

    说法很多,但都无法解决我的问题

    最后看到一个哥们的问题和我很接近,说是使用D-link或者TP-LINK的交换机时容易出现此类问题,重启服务器或者交换机能够解决

    我的交换机正巧是D-Link,网卡也是D-Link的,但是由于这台交换机连接着很多服务器,重启交换机是不可行了,服务器已经重启过了,没能解决问题。只好找了根网线临时接到其他品牌的交换机上一试,我靠,都好了。。。。差点害我重装服务器

    不知道这是D-link产品的bug,还是另有其因。。。但这件事让我认识到,有时候考虑问题还是太局限性了,虽然换了网线换了端口,但依旧没有跳出这台交换机,那时候如果思维跳出这台交换机的范围,想的更远点,或许问题就豁然开朗了。

    展开全文
  • 网卡接收数据流程

    千次阅读 2017-06-23 13:49:19
    (物理层)网卡接收来自其他节点的数据帧 (链路层)根据帧头信息获取数据报 (网络层)路由过滤,判断是否应该丢弃该数据报,并根据数据报头信息获取TCP/UDP数据段 (运输层)根据数据段头信息获取实际的...
  • 网卡如何发送接收数据包

    千次阅读 2015-01-05 00:02:18
     MAC包中含有发送端和接收端的MAC地址信息。既然是驱动程序创建的MAC包头信息,当然可以随便输入地址信息的,主机伪装就是这么实现的。  驱动程序将MAC包拷贝到网卡芯片内部的缓存区,就算完事了。有网卡芯片...
  • # RX 为接收数据,TX为发送数据,packet为数据包的个数,bytes为流量数 ifconfig eth0 | awk '/RX p/{print $5}' #过滤接收数据的流量 ifconfig eth0 | awk '/TX p/{print $5}' #过滤发送数据的流量 ...
  • 摘要:C#源码,网络相关,网络流量统计 C#网络发送与接收统计程序,本程序相关的技术要领:计时器制作、获取网卡、判断网卡是否在在、刷新网络流量、获取屏幕高度和宽度、获取当前鼠标的屏幕坐标、设置当前窗体在屏幕...
  • 详细描述了如何在局域网内发送接收消息,提供给分数不多的同行
  • 当一台计算机上有多个网卡时,需要选择对应IP地址的网卡进行发送数据包或者接受数据包。 1、选择网卡发包(应用scapy): plface=conf.route.route(××.××.××.××)[0] #××.××.××.××为对应网卡网络中...
  • 网卡发送与接收数据包

    千次阅读 2012-01-04 14:07:42
    MAC包中含有发送端和接收端的MAC地址信息。既然是驱动程序创建的MAC包头信息,当然可以随便输入地址信息的。主机伪装就是这么实现的。 驱动程序将MAC包拷贝到网卡芯片内部的缓冲区,就算完事了。有网卡芯片接手处理...
  • 网卡如何接收数据包

    千次阅读 2018-05-03 14:45:17
     MAC包中含有发送端和接收端的MAC地址信息。既然是驱动程序创建的MAC包头信息,当然可以随便输入地址信息的,主机伪装就是这么实现的。 驱动程序将MAC包拷贝到网卡芯片内部的缓存区,就算完事了。有网卡芯片接手...
  • ffmpeg指定网卡接收流(绑定网卡)

    千次阅读 2019-04-01 21:40:43
    AVDictionary* opts = NULL; av_dict_set(&opts, "localaddr", "192.168.15.15", 0); // 如果有超时设置,继续使用上述函数,超时的key一般为timeout int nRet = avformat_open_input(&...
  • //网卡1    IPEndPoint ipe=  new  IPEndPoint(IPAddress.Parse( "192.168.1.65" ),5212);    //网卡2    IPEndPoint ipe1 =  new  IPEndPoint(IPAddress.Parse( "192.168.1.67" ), 5213);      //...
  • 指定网卡发送数据包

    千次阅读 2018-11-15 18:50:40
    1. 指定网卡发送数据 指定网卡名需要使用struct sockaddr_ll,struct ifreq, 使用ioctl()函数获取网卡索引号,使用原始套接字发送UDP数据,代码如下: #include &lt;stdio.h&gt; #include &lt;...
  • Windows多网卡环境接收组播包

    千次阅读 2020-05-07 15:08:09
    title: “Windows多网卡环境接收组播包” subtitle: “跨过千山万水,踏遍海角天涯–I got it!” date: “2018-01-14” author: “cj” tags: multicast windows multiple-interfaces c++ 说明:本文仅针对IPv4 ...
  • /* 设置发送接收源主机的地址信息 */         // mreq.imr_interface.s_addr = htonl (INADDR_ANY);      //这样写是否能绑定到对应的网卡上    mreq.imr_interface.s_addr = ...
  • 今天调试新板卡,遇到一个很奇怪的现象,eth0能...经过排查网线故障、交换机故障一系列之后,我用板卡自ping,发现也不通,故怀疑是网卡驱动故障。经检查,网卡使用了新的phy芯片,设备树配置的确有问题,更改后正常。
  • 单个TCP包每次打包1448字节的数据进行发送(以太网Ethernet最大的数据帧是1518字节,以太网帧的帧头14字节和帧尾CRC校验4字节  seq编码,在RFC793中,建议ISN和一个假的时钟绑在一起,这个时钟会在每4微秒对...
  • 网卡数据的接收

    千次阅读 2017-08-07 10:58:24
    数据的接收网卡有数据收到时,网卡会产生硬件中断,驱动在中断处理函数中读取通道上的数据并将数据发往上层,由于会频繁的收到网络数据包,中断处理函数将耗时的数据处理放在低半部处理,常用的低半部机制为...
  • 网络发送接收统计 C# 源码
  • 网卡发送接收数据的快捷处理

    千次阅读 2011-08-17 09:06:09
    右键本地连接的的属性--状态--显示接收数据为0时,有数据发送的情况初步可以断定网卡故障,但是还是得检查几个东西,首先确定你的网络线路是正常的,用测线仪测试得保证1,2,3.6线是通的 1.开始--运行--输入cmd--ping...
  • 描叙:早上上班有一位同事反映无法上网,到现场查看,发现网络连接正常,但是网卡灯常亮不闪,本地连接状态显示有数据包发送,但是接收到得数据包非常少,ping网关出现掉包非常严重得现象;查看交换机端口,此相连...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 95,674
精华内容 38,269
关键字:

网卡接收与发送