【毕设日记】(4)go语言基于gopacket+fyne简单抓包工具实现之GUI

本文介绍了作者在UI部分增加了两个新的组件,分别用于显示PkgInfo的16进制原报文数据和各层网络信息。同时,app.go中的代码进行了相应调整,以整合新功能并优化布局。最终结果显示了PkgInfo和Layers在窗口中的位置变化。
摘要由CSDN通过智能技术生成

增加了两个部分的ui和修改app.go的代码
PkgInfo.go 这个是显示下面的16进制原报文数据

package ui
import (
	fyne2 "fyne.io/fyne/v2"
	"fyne.io/fyne/v2/container"
	"fyne.io/fyne/v2/data/binding"
	"fyne.io/fyne/v2/widget"
	//"github.com/google/gopacket"
)
func loadPkgInfo()  (*fyne2.Container,binding.String){
	bs:=binding.NewString()
	s:=" "
	bs.Set(s)
	l:=widget.NewLabelWithData(bs)
	scrollC:=container.NewVScroll(l)
	speparator:=widget.NewSeparator()
	PkgInfoContainer:=container.NewBorder(nil,speparator,nil,nil,scrollC)
	PkgInfoContainer.Resize(fyne2.NewSize(1600,240))
	return PkgInfoContainer,bs
}
func PkgBytes2String(PkgBytes []byte) string{
	res:=""
	for i,v:=range PkgBytes{
		if i!=0&&i%8==0{
			res+="   "
		}
		if i!=0&&i%16==0{
			res+="\n"
		}
		res+=byte2Hex(v)+" "
	}
	return res
}
func byte2Hex(b byte) string{
	care:=[]string{"0","1","2","3","4","5","6","7","8","9","a","b","c","d","e","f"}
	bb:=int(b)
	res:=""
	if b==0{
		return "00"
	}
	if b<16{
		return "0"+care[bb%16]
	}
	for bb>0{
		res=care[bb%16]+res
		bb/=16
	}
	return res
}

Layers.go 这个是显示各层的信息

package ui

import (
	fyne2 "fyne.io/fyne/v2"
	"fyne.io/fyne/v2/container"
	"fyne.io/fyne/v2/data/binding"
	"fyne.io/fyne/v2/widget"
	//"time"
)
func loadLayers()(*fyne2.Container,binding.String){
	bs:=binding.NewString()
	s:=" "
	bs.Set(s)
	l:=widget.NewLabelWithData(bs)
	scrollC:=container.NewScroll(l)
	speparator:=widget.NewSeparator()
	PkgInfoContainer:=container.NewBorder(nil,speparator,nil,nil,scrollC)
	PkgInfoContainer.Resize(fyne2.NewSize(1600,240))
	return PkgInfoContainer,bs
}

在app.go中修改代码

package ui

import (
	"IP_pkg_analyze/ip"
	fyne2 "fyne.io/fyne/v2"
	"fyne.io/fyne/v2/app"
	"fyne.io/fyne/v2/container"
)
func Run()  {
	a := app.New()
	//a.Settings().SetTheme(&myTheme{})
	w := a.NewWindow("简单的IP抓包工具")
	appIconPath,err:=fyne2.LoadResourceFromPath("C:\\Users\\Administrator\\Pictures\\QQ截图20190324000505.png")
	if err!=nil{
		panic(err)
	}
	w.SetIcon(appIconPath)
	loadMenus(w)
	//p:=PkgRow{Source: "src",Dest: "dst"}
	b:= ip.Get_if_list()
	Layers,layerinfo:=loadLayers()
	PkgInfo,pkg:=loadPkgInfo()
	PkgList,list:=loadPkgList(layerinfo,pkg)
	PkgListContainer:=container.NewWithoutLayout(PkgList)
	//PkgListContainer.Resize(fyne2.NewSize(1600,280))
	//PkgInfoContainer:=container.NewBorder(PkgListContainer,nil,nil,nil,PkgInfo)
	//PkgInfoContainer.Resize(fyne2.NewSize(1600,280))
	Layers.Move(fyne2.NewPos(0,280))
	PkgInfo.Move(fyne2.NewPos(0,520))
	AllContainer:=container.NewWithoutLayout(PkgListContainer,Layers,PkgInfo)
	w.SetContent(AllContainer)
	w.Resize(fyne2.NewSize(1600, 800))
	go ip.GetPkg(b[0].NPFName,list)
	w.ShowAndRun()
}


结果图:
在这里插入图片描述

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值