精华内容
下载资源
问答
  • eth_type_trans的处理流程图

    千次阅读 2013-06-29 21:38:20
    Linux Version:2.6.33 提示 :本文是关于L2 的 Ethernet分析L3协议的过程!   Flow图如下:     ...0xFFFFFFFFFFFF 时就是 broadcast .
    Linux Version:2.6.33
    提示 :本文是关于L2 Ethernet分析L3协议的过程!
     
    Flow图如下:
     
     
    如何判断目的地地址是 multicast 和 broadcast呢?
    Ethernat的地址其实就是Mac地址。所以长度是6byte。其中有一位为 multicast bit位。
    格式如下
    unicast/multicast bit位置1时就是 Multicast, Mac地址为 0xFFFFFFFFFFFF时就是
    broadcast.
    展开全文
  • 参考一下博客: http://yaoyang.blog.51cto.com/7657153/1269713 http://blog.csdn.net/eric_liufeng/article/details/10475583 /** * eth_type_trans - determine the packet's protocol ID. * @skb: received

    参考一下博客:

    http://yaoyang.blog.51cto.com/7657153/1269713

    http://blog.csdn.net/eric_liufeng/article/details/10475583

    网络驱动接收到报文后,会初始化skb->protocol字段,再通过netif_rx(skb);传输给3层协议,3层协议根据skb->protocol字段决定使用哪个协议实例处理。

    某一mac协议类型的全部网络设备都是使用相同的xx_type_trans()函数来获取protocol的:以太网设备驱动调用eth_type_trans(), FDDI网络设备驱动调用fddi_type_trans().

    /**
     * eth_type_trans - determine the packet's protocol ID.
     * @skb: received socket data
     * @dev: receiving network device
     *
     * The rule here is that we
     * assume 802.3 if the type field is short enough to be a length.
     * This is normal practice and works for any 'now in use' protocol.
     */
    __be16 eth_type_trans(struct sk_buff *skb, struct net_device *dev)
    {
    	unsigned short _service_access_point;
    	const unsigned short *sap;
    	const struct ethhdr *eth;
    
    	skb->dev = dev;
    	skb_reset_mac_header(skb);
    	//获取第二层数据包的报头
    	skb_pull_inline(skb, ETH_HLEN);
    	eth = eth_hdr(skb);
    
    	/*
    	* 在skb->pkt_type中得到识别和注册
    	* PACKET_BROADCAST:广播包 
    	* PACKET_MULTICAST:2层组播地址 
    	* PACKET_HOST:发送给本机的报文 
    	* PACKET_OTHERHOST: 发送给其他主机的报文,这里主机应该处于混杂模式中 
    	*/
    	if (unlikely(is_multicast_ether_addr(eth->h_dest))) {
    		if (ether_addr_equal_64bits(eth->h_dest, dev->broadcast))
    			skb->pkt_type = PACKET_BROADCAST;
    		else
    			skb->pkt_type = PACKET_MULTICAST;
    	}
    	else if (unlikely(!ether_addr_equal_64bits(eth->h_dest,
    						   dev->dev_addr)))
    		skb->pkt_type = PACKET_OTHERHOST;
    
    	/*
    	 * Some variants of DSA tagging don't have an ethertype field
    	 * at all, so we check here whether one of those tagging
    	 * variants has been configured on the receiving interface,
    	 * and if so, set skb->protocol without looking at the packet.
    	 */
    	if (unlikely(netdev_uses_dsa(dev)))
    		return htons(ETH_P_XDSA);
    
    	/*如果长度大于1536(最大帧长度ETH_P_802_3_MIN),那么他是802.3兼容以太网卡,协议字段在eth->h_proto中标识*/  
    	if (likely(ntohs(eth->h_proto) >= ETH_P_802_3_MIN))
    		return eth->h_proto;
    
    	/*
    	 *      This is a magic hack to spot IPX packets. Older Novell breaks
    	 *      the protocol design and runs IPX over 802.3 without an 802.2 LLC
    	 *      layer. We look for FFFF which isn't a used 802.2 SSAP/DSAP. This
    	 *      won't work for fault tolerant netware but does for the rest.
    	 */
    	sap = skb_header_pointer(skb, 0, sizeof(*sap), &_service_access_point);
    	if (sap && *sap == 0xFFFF)
    		return htons(ETH_P_802_3);
    
    	/*
    	 *      Real 802.2 LLC
             * 802.2的协议头返回后,被当做三层报文处理, 
             * 协议处理被散列在ptype_base中,协议处理函数为p8022_rcv() 
             * 对应的三层协议可以通过 register_8022_client() 将自己的处理函数注册到p8022_rcv()中 
             * 如果 register_8022_client(0xAA, snap_rcv)就将SNAP的三层处理函数注册进去了
    	 */
    	return htons(ETH_P_802_2);
    }


    展开全文
  • Linux网卡名改eth0方法

    2018-09-17 16:23:13
    查看网卡名 ifconfig 修改70-persistent-net.rules ... 修改网卡文件名称 mv /etc/sysconfig/network-scripts/ifcfg-ethX /etc/sysconfig/network-scripts/ifcfg-eth0   编辑网卡配置文件...

    查看网卡名

    ifconfig

    修改70-persistent-net.rules

    vim /etc/udev/rules.d/70-persistent-net.rules

    修改网卡文件名称

    mv /etc/sysconfig/network-scripts/ifcfg-ethX /etc/sysconfig/network-scripts/ifcfg-eth0

     

    编辑网卡配置文件

    vim /etc/sysconfig/network-scripts/ifcfg-eth0

    将其中的DEVICE=ethX改成eth0

    重启

    service network restart

    reboot

     

    展开全文
  • linux自身有两种从数据链路层接收分组:一种为fd=socket(PF_PACKET,SOCK_RAW,htons(ETH_P_ALL));另一种为fd=socket(AF_INET,SOCK_PACKET,htons(ETH_P_ALL));这其中协议族为PF_PACKET套接字使用较多。ETH_P_ALL自身...

    linux自身有两种从数据链路层接收分组:

    一种为fd=socket(PF_PACKET,SOCK_RAW,htons(ETH_P_ALL));

    另一种为fd=socket(AF_INET,SOCK_PACKET,htons(ETH_P_ALL));

    这其中协议族为PF_PACKET套接字使用较多。

    ETH_P_ALL自身定义于  /usr/include/linux/if_ether.h中,

    #define ETH_P_ALL       0x0003

    ETH_P_ALL占两个字节值为0x0003

    其他的:

    #define ETH_P_LOOP 0x0060 /* Ethernet Loopback packet */

    #define ETH_P_PUP 0x0200 /* Xerox PUP packet */

    #define ETH_P_PUPAT 0x0201 /* Xerox PUP Addr Trans packet */

    #define ETH_P_IP 0x0800 /* Internet Protocol packet */

    #define ETH_P_X25 0x0805 /* CCITT X.25 */

    #define ETH_P_ARP 0x0806 /* Address Resolution packet */

    #define ETH_P_BPQ 0x08FF /* G8BPQ AX.25 Ethernet Packet [ NOT AN

    #define ETH_P_IEEEPUP 0x0a00 /* Xerox IEEE802.3 PUP packet */

    #define ETH_P_IEEEPUPAT 0x0a01 /* Xerox IEEE802.3 PUP Addr Trans packet*/

    以太网封装中,数据链路帧中类型字段为0800指示的数据为ip报文,0806为ARP报文等等。

    在socket函数中,若指定第三个参数为ETH_P_ARP则指示只将接收的帧中的哪些类型的帧传递给所创建的套接字。

    知道了这些,那么我们可以接收一些if_ether.h里并没有定义的类型的数据链路帧

    比如:

    socket(PF_PACKET, SOCK_RAW, htons(0x88CC));

    这个就是向套接字传递数据链路报文数据类型为88CC的报文,0x88cc报文为LLDP报文,if_ether.h并没有定义。我们使用recvfrom就能够获取到该类型的数据链路帧。

    而使用sendto函数可以发送由我们自己定义的数据链路帧报头(这里可以将类型字段设置为0x88cc)。

    想想内核将接收的报文传递给原始套接字两个的限制条件:

    1)一是TCP/UDP分组绝不会传递给Raw socket

    二是大多数ICMP在内核处理完后,传递给Raw socket

    三是所有的IGMP在内核处理完后,传递给Raw socket

    四是内核不认识其协议字段的IP数据报文传递给Raw socket

    五是某个数据以分片的形式到达,则在所有分片到达重组之后,才传递给Raw socket

    若以上5个条件满足,那么下面的3个条件也是必需要满足:

    2)一是创建原始套接字时,协议字段非0,则接收的数据报文协议字段,必需匹配该值,否则,不传递该报文

    二是bind了本地IP地址,数据报的目的地址必需和本地IP地址匹配

    三是connect某个外地IP地址,那么则数据报源地址也必须匹配。

    也就是说原始套接字实际上是不能够接收tcp/udp分组的,只能使用libpcap库来接收。但是libpcap库的一点限制就是只能接收不能发。

    如以下实例发送以太网数据链路帧,指定上层报文类型为0x88cc

    /*

    author:gs

    time:2013/9/23

    function:send L2 packets

    */

    #include

    #include

    #include

    #include

    #include/*for uint16_t*/

    #include

    #include

    #include

    struct lldpdu

    {

    char dst[6];

    char src[6];

    uint16_t type;

    };

    int main(int argc,char* argv[])

    {

    struct lldpdu* lpacket = malloc(sizeof(struct lldpdu));

    memset(lpacket,0,sizeof(struct lldpdu));

    struct sockaddr_ll sll;

    memset(&sll,0,sizeof(struct sockaddr_ll));

    int sk = socket(PF_PACKET, SOCK_RAW, htons(0x88CC));/*使用pf_packet接口创建套接字*/

    sll.sll_family = PF_PACKET;

    sll.sll_ifindex = if_nametoindex("eth0");/*sll虽然是用来指定目的地址的,但是在这个结构体中sll_ifindex 却指定的是本机发送报文的接口索引*/

    sll.sll_protocol = htons(0x88CC);

    sll.sll_addr[0] = 0x34;/*sll_addr指定目的MAC地址*/

    sll.sll_addr[1] = 0xb0;

    sll.sll_addr[2] = 0x52;

    sll.sll_addr[3] = 0xda;

    sll.sll_addr[4] = 0xda;

    sll.sll_addr[5] = 0x18;

    lpacket->dst[0] = 0x34;/*自己构造的L2 报文的目的地址*/

    lpacket->dst[1] = 0xb0;

    lpacket->dst[2] = 0x52;

    lpacket->dst[3] = 0xda;

    lpacket->dst[4] = 0xda;

    lpacket->dst[5] = 0x18;

    lpacket->src[0] = 0x00;/*自己构造的L2 报文的源地址*/

    lpacket->src[1] = 0x0c;

    lpacket->src[2] = 0x29;

    lpacket->src[3] = 0x8d;

    lpacket->src[4] = 0xf1;

    lpacket->src[5] = 0x04;

    lpacket->type = htons(0x88cc);/*报文类型*/

    while(1)

    {

    /*只有L2头,数据为空。每隔3秒发送0X88CC报文,即LLDP报文*/

    sendto(sk, lpacket, 14, 0, (struct sockaddr*)&sll, sizeof(struct sockaddr_ll));

    printf("send one lldp packet\n");

    sleep(3);

    }

    return 0;

    }

    这之中要注意的是sockaddr_ll,其中的sll_ifindex指定的为本机发送接口索引,而非目的地址接口索引。

    以上程序发送的LLDP报文,能够在wireshark中捕捉到。

    发现一个奇怪的现象,当sll中指定的目的地址和报文中的目的地址不一致时,会出现什么呢?

    经实际测试,发现这种情况下,wireshark捕捉的报文以报文中的目的地址为准。而实际上,sll中不指定目的的MAC地址,报文也能被发送到正确的目的地去。它会使用报文的前6个字节,当做目的地址。

    展开全文
  • 使用PHP语言实现ETH 及 token转账

    千次阅读 2019-03-25 10:56:12
    以太坊转账 废话不多说直接上代码 代码下载地址 ... github代码 用你们可爱的小手 点一下...https://github.com/zcJun/php-eth <?php /** * zcj编写 * 以太坊开发技术交流群 * 大家一起相互学习 * QQ群:5...
  • 1, How this log output ? in drivers/net/enc424j600.c, enc424j600_send_packet will stop sending queue, recording trans starting time. 1411 static int enc424j600_send_packet(struct sk_buff *skb, str
  • 0. 背景 上一篇文章我们从合约编写、编译、部署、交互等几个方面介绍了truffle的大致用法。 本篇主要继续深入地介绍truffle的高级用法 + 合约源码分析 1. 将合约部署到测试网Ropsten 1.1 注册infura获取API-KEY ...
  • web3.eth.sendTransaction

    万次阅读 2018-04-25 13:33:56
    如果你希望马上开始学习以太坊DApp开发,可以访问汇智网提供的出色的在线互动教程: 以太坊DApp实战入门教程 以太坊去中心化电商应用开发实战 发送一个交易到网络。...web3.eth.sendTransaction(trans...
  • 以太坊(ETH)简单的交易

    千次阅读 2020-04-03 13:29:46
    最近在学习eth的交易,简单记录一下。 1.创建一个属于自己的以太坊链地址 方式1:我们可以通过https://infura.io/来申请一个自己的地址,当然目前官方人员不建议使用这个。因为以太坊提出的理念是去中心化,每个节点...
  • } eth 转账 public static void trans() throws ExecutionException, InterruptedException, IOException, CipherException{ //设置需要的矿工费 //调用的是kovan测试环境,这里使用的是infura这个客户端 Web3j web...
  • SOCK_TYPE 和 ETH_P_IP

    千次阅读 2019-08-05 19:24:58
    0x0201 /* Xerox PUP Addr Trans packet */ 45 #define ETH_P_IP 0x0800 /* Internet Protocol packet */ 46 #define ETH_P_X25 0x0805 /* CCITT X.25 */ 47 #define ETH_P_ARP 0x0806 /* Address ...
  • } if (balance.compareTo(amount.toBigInteger()) <= 0) {//wallet balance must greater than trans amount log.info("wallet balance is less than trans amount"); return false; } TransactionReceipt send = ...
  • 1.搭建ETH私链测试环境 2.Python代码与ETH互通即发起交易获取交易信息; GETH Geth 又名Go Ethereum. 是以太坊协议的三种实现之一,由Go语言开发,完全开源的项目。 Geth 可以被安装在很多操作系统...
  • 点击上方“3D视觉工坊”,选择“星标”干货第一时间送达作者丨happy编辑丨极市平台导读鲜少有工作将transformer用于图像复原方向,而ETH的学者近日提出基于Swin Trans...
  • "result": { "0": "0x556673dad4114df924fd0e161195dde4594bb80a", "1": "0x916e37c7635f9552316ee7cec1599d8ff0bb03c3", "2": "1650520000", "from": "0x556673dad4114df924fd0e161195dde4594bb80a", "to": "0x916...
  • 本次要分享的是使用传入的私钥或者json文件的方式进行ETH交易,交易中可以使用默认的矿工费用和燃料限制,也可以使用自定义燃料费用的方式。 /** * 使用默认的矿工费用,传入生成的钱包文件当交易凭证,进行ETH...
  • 以太坊 代币转账

    千次阅读 2019-07-11 10:09:11
    以太坊 代币转账 废话不多说直接上代码 代码下载地址 ... github代码 用你们可爱的小手 点一下...https://github.com/zcJun/php-eth <?php /** * zcj编写 * 以太坊开发技术交流群 * 大家一起相互学习 *...
  •  inet 172.16.3.111/24 brd 172.16.3.255 scope global eth0 而不是eth0:1 [root@db- 172-16-3-111  network-scripts]# ip addr show 1: lo: ,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN   ...
  • 协议处理函数 ...protocol = eth_type_trans(skb, nic->netdev); protocol字段被前面章节出现过的__netif_receive_skb函数使用,找到合适的L3处理函数并调用deliver_skb函数将skb传递到上层进行处理。
  • [root@linux]/# ifconfig eth1 3.3.3.3 [root@linux]/# Unable to handle kernel NULL pointer dereference at virtual address 00000000 pgd = 553bf097 [00000000] *pgd=00000000 Internal error: Oops: 80000007 ...
  • 以太网帧结构

    千次阅读 2016-10-06 23:32:35
    struct ethhdr { ...h_dest[ETH_ALEN]; /* destination eth addr */ unsigned char h_source[ETH_ALEN]; /* source ether addr */ __be16 h_proto; /* packet type ID field */ } __attribu
  • TransCenter解读

    2021-04-06 12:50:23
    首先是中心预测分支,为了训练这个分支首先需要构建GT热力图 C ∗ ∈ [ 0 , 1 ] H / 4 × W / 4 \mathbf{C}^{*} \in[0,1]^{H / 4 \times W / 4} C∗∈[0,1]H/4×W/4,这里的思路和CenterTrack一致,通过考虑以每 K ...
  • struct ethhdr结构体详解

    万次阅读 2014-12-06 13:17:41
     __be16 eth_type_trans(struct sk_buff *skb,   struct net_device *dev);  EXPORT_SYMBOL(eth_type_trans);  skb : 为正在接收的数据包;  dev : 为正在使用的网络设备; ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,550
精华内容 1,420
关键字:

transeth0

友情链接: nobodycaresme.rar