新TAP测试(TODO 解析arp)
This commit is contained in:
		
							parent
							
								
									9f4c58e14a
								
							
						
					
					
						commit
						87a90722bd
					
				
							
								
								
									
										30
									
								
								netcard.go
									
									
									
									
									
								
							
							
						
						
									
										30
									
								
								netcard.go
									
									
									
									
									
								
							@ -1,6 +1,7 @@
 | 
				
			|||||||
package main
 | 
					package main
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import (
 | 
					import (
 | 
				
			||||||
 | 
						"encoding/binary"
 | 
				
			||||||
	"fmt"
 | 
						"fmt"
 | 
				
			||||||
	"log"
 | 
						"log"
 | 
				
			||||||
	"net"
 | 
						"net"
 | 
				
			||||||
@ -87,18 +88,25 @@ func NewNetTunnel() *NetTunnel {
 | 
				
			|||||||
			switch frame.Ethertype() {
 | 
								switch frame.Ethertype() {
 | 
				
			||||||
			case ethernet.ARP:
 | 
								case ethernet.ARP:
 | 
				
			||||||
				log.Printf("bytes len: %d type(arp): % x", len(rbuf), frame.Ethertype()) // 数据长度
 | 
									log.Printf("bytes len: %d type(arp): % x", len(rbuf), frame.Ethertype()) // 数据长度
 | 
				
			||||||
				//TODO: 解析arp 回应arp
 | 
					 | 
				
			||||||
				nt.clients.Range(func(key, value any) bool {
 | 
					 | 
				
			||||||
					if key == nt.ipv4key {
 | 
					 | 
				
			||||||
						return true
 | 
					 | 
				
			||||||
					}
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
					client := value.(*RPCClient)
 | 
									SwapBytes(frame, 0, frame, 6, 6)
 | 
				
			||||||
					client.CheckConnect()
 | 
									binary.BigEndian.PutUint16(frame[20:22], 2)
 | 
				
			||||||
					client.Frame <- frame
 | 
									SwapBytes(frame, 22, frame, 32, 10)
 | 
				
			||||||
					log.Println(client.realAddr)
 | 
					
 | 
				
			||||||
					return true
 | 
									nt.ifce.Write(frame)
 | 
				
			||||||
				})
 | 
					
 | 
				
			||||||
 | 
									//TODO: 解析arp 回应arp
 | 
				
			||||||
 | 
									// nt.clients.Range(func(key, value any) bool {
 | 
				
			||||||
 | 
									// 	if key == nt.ipv4key {
 | 
				
			||||||
 | 
									// 		return true
 | 
				
			||||||
 | 
									// 	}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
									// 	client := value.(*RPCClient)
 | 
				
			||||||
 | 
									// 	client.CheckConnect()
 | 
				
			||||||
 | 
									// 	client.Frame <- frame
 | 
				
			||||||
 | 
									// 	log.Println(client.realAddr)
 | 
				
			||||||
 | 
									// 	return true
 | 
				
			||||||
 | 
									// })
 | 
				
			||||||
			case ethernet.IPv4:
 | 
								case ethernet.IPv4:
 | 
				
			||||||
				log.Printf("bytes len: %d type(ipv4): % x", len(rbuf), frame.Ethertype())
 | 
									log.Printf("bytes len: %d type(ipv4): % x", len(rbuf), frame.Ethertype())
 | 
				
			||||||
				log.Println(len(frame))
 | 
									log.Println(len(frame))
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										7
									
								
								utils.go
									
									
									
									
									
								
							
							
						
						
									
										7
									
								
								utils.go
									
									
									
									
									
								
							@ -54,3 +54,10 @@ func Decompress(data []byte) (frames [][]byte) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	return
 | 
						return
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func SwapBytes(frame1 []byte, start1 int, frame2 []byte, start2 int, size int) {
 | 
				
			||||||
 | 
						var temp []byte = make([]byte, size)
 | 
				
			||||||
 | 
						copy(temp, frame1[start1:start1+size])
 | 
				
			||||||
 | 
						copy(frame1[start1:start1+size], frame2[start2:start2+size])
 | 
				
			||||||
 | 
						copy(frame2[start2:start2+size], temp)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user