tcpdump-3dde7de7.js 9.8 KB

12
  1. import{n,a_ as I,d as L,c as v,f as $,j as V,Z as w,$ as P,a0 as u,T as r,a7 as e,b3 as O,aP as C,a5 as c,a9 as S,a1 as q,cl as X,a6 as k,bn as y,bb as x,at as H}from"./index-8a67e3df.js";import{s as Z}from"./debug-d93946e9.js";import"./index-8852fa89.js";import{F as G}from"./Form-dde1bdea.js";import{_ as b}from"./FormItem-52c83ce9.js";import{_ as J}from"./index-66456a53.js";import{A as Q}from"./index-f6e7ad63.js";import{P as W}from"./index-6a257713.js";import{c as Y,b as K}from"./index-5769f132.js";import"./dayjs-919e6097.js";import"./toInteger-9a80771f.js";var ee={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm0 820c-205.4 0-372-166.6-372-372s166.6-372 372-372 372 166.6 372 372-166.6 372-372 372z"}},{tag:"path",attrs:{d:"M719.4 499.1l-296.1-215A15.9 15.9 0 00398 297v430c0 13.1 14.8 20.5 25.3 12.9l296.1-215a15.9 15.9 0 000-25.8zm-257.6 134V390.9L628.5 512 461.8 633.1z"}}]},name:"play-circle",theme:"outlined"};const te=ee;function N(o){for(var t=1;t<arguments.length;t++){var a=arguments[t]!=null?Object(arguments[t]):{},s=Object.keys(a);typeof Object.getOwnPropertySymbols=="function"&&(s=s.concat(Object.getOwnPropertySymbols(a).filter(function(d){return Object.getOwnPropertyDescriptor(a,d).enumerable}))),s.forEach(function(d){le(o,d,a[d])})}return o}function le(o,t,a){return t in o?Object.defineProperty(o,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):o[t]=a,o}var z=function(t,a){var s=N({},t,a.attrs);return n(I,N({},s,{icon:te}),null)};z.displayName="PlayCircleOutlined";z.inheritAttrs=!1;const ae=z;var re={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm0 820c-205.4 0-372-166.6-372-372 0-89 31.3-170.8 83.5-234.8l523.3 523.3C682.8 852.7 601 884 512 884zm288.5-137.2L277.2 223.5C341.2 171.3 423 140 512 140c205.4 0 372 166.6 372 372 0 89-31.3 170.8-83.5 234.8z"}}]},name:"stop",theme:"outlined"};const ne=re;function U(o){for(var t=1;t<arguments.length;t++){var a=arguments[t]!=null?Object(arguments[t]):{},s=Object.keys(a);typeof Object.getOwnPropertySymbols=="function"&&(s=s.concat(Object.getOwnPropertySymbols(a).filter(function(d){return Object.getOwnPropertyDescriptor(a,d).enumerable}))),s.forEach(function(d){se(o,d,a[d])})}return o}function se(o,t,a){return t in o?Object.defineProperty(o,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):o[t]=a,o}var j=function(t,a){var s=U({},t,a.attrs);return n(I,U({},s,{icon:ne}),null)};j.displayName="StopOutlined";j.inheritAttrs=!1;const oe=j,ue={style:{padding:"24px","max-width":"1400px",margin:"0 auto"}},ie={key:1,style:{"margin-bottom":"24px"}},de={style:{"text-align":"center",padding:"20px"}},pe={style:{"margin-top":"16px"}},ce={style:{"font-size":"24px","font-weight":"bold",color:"#1890ff"}},me={class:"form-layout"},fe={class:"form-section"},ve={class:"help-section"},be=L({name:"TcpdumpCapture"}),ge=L({...be,setup(o){const t=v({interface:"",filter:"",extra_args:"",duration:5,password:""}),a=v(!1),s=v(0),d=v(0),f=v(!1),m=v(""),A=$(()=>d.value===0?0:Math.round((d.value-s.value)/d.value*100)),T=$(()=>{const i=Math.floor(s.value/60),l=s.value%60;return`${i.toString().padStart(2,"0")}:${l.toString().padStart(2,"0")}`});let _=null;const D={duration:[{required:!0,message:"请输入抓包持续时间"},{validator:(i,l)=>l?isNaN(l)||l<=0?Promise.reject("持续时间必须是大于0的数字"):l>300?Promise.reject("持续时间不能超过300秒"):Promise.resolve():Promise.resolve()}]},F=i=>{s.value=i,d.value=i,_=setInterval(()=>{s.value--,s.value<=0&&h()},1e3)},h=()=>{_&&(clearInterval(_),_=null),s.value=0,d.value=0},M=async()=>{try{if(!t.value.duration){m.value="持续时间是必填项";return}const i=t.value.duration;if(isNaN(i)||i<=0){m.value="持续时间必须是大于0的数字";return}if(i>300){m.value="持续时间不能超过300秒";return}m.value="",a.value=!0,f.value=!0,F(i),x.info(`开始抓包,预计 ${i} 秒后完成`);const p=await(await Z({interface:t.value.interface.trim(),filter:t.value.filter.trim(),extra_args:t.value.extra_args.trim(),duration:t.value.duration,password:t.value.password.trim()})).blob(),B=window.URL.createObjectURL(p),g=document.createElement("a");g.href=B,g.download="tcpdump.txt",document.body.appendChild(g),g.click(),document.body.removeChild(g),window.URL.revokeObjectURL(B),x.success("抓包完成,文件已下载")}catch(i){console.error("抓包失败:",i),m.value=i instanceof Error?i.message:"抓包失败,请检查网络连接和参数设置",x.error("抓包失败")}finally{a.value=!1,f.value=!1,h()}},E=()=>{a.value=!1,f.value=!1,h(),x.info("已停止抓包")},R=()=>{t.value={interface:"",filter:"",extra_args:"",duration:0,password:""},m.value=""};return V(()=>{h()}),(i,l)=>(w(),P(r(K),null,{default:u(()=>[n(r(Y),null,{default:u(()=>[e("div",ue,[n(r(O),{title:"网络抓包分析",bordered:!1},{extra:u(()=>[n(r(J),null,{default:u(()=>[n(r(C),{onClick:R,disabled:a.value},{default:u(()=>l[6]||(l[6]=[c(" 重置 ")])),_:1},8,["disabled"])]),_:1})]),default:u(()=>[m.value?(w(),P(r(Q),{key:0,message:m.value,type:"error","show-icon":"",closable:"",onClose:l[0]||(l[0]=p=>m.value=""),style:{"margin-bottom":"16px"}},null,8,["message"])):S("",!0),a.value?(w(),q("div",ie,[n(r(O),{size:"small",title:"抓包进行中..."},{default:u(()=>[e("div",de,[n(r(X),{size:"large"}),e("div",pe,[e("div",ce,k(T.value),1),l[7]||(l[7]=e("div",{style:{"margin-top":"8px",color:"#666"}},"剩余时间",-1))]),n(r(W),{percent:A.value,"stroke-color":{"0%":"#108ee9","100%":"#87d068"},style:{"margin-top":"16px"}},null,8,["percent"]),n(r(C),{type:"primary",danger:"",onClick:E,style:{"margin-top":"16px"}},{default:u(()=>[n(r(oe)),l[8]||(l[8]=c(" 停止抓包 "))]),_:1})])]),_:1})])):S("",!0),e("div",me,[e("div",fe,[n(r(O),{title:"配置参数",class:"form-card"},{default:u(()=>[n(r(G),{model:t.value,rules:D,layout:"vertical",disabled:a.value,class:"config-form"},{default:u(()=>[n(r(b),{label:"网络接口",name:"interface",class:"form-item"},{default:u(()=>[n(r(y),{value:t.value.interface,"onUpdate:value":l[1]||(l[1]=p=>t.value.interface=p),placeholder:"指定网络接口,如 eth0、wlan0 等(可选)",disabled:a.value,size:"large"},null,8,["value","disabled"]),l[9]||(l[9]=e("div",{class:"form-help"},"留空则使用默认接口",-1))]),_:1}),n(r(b),{label:"过滤条件",name:"filter",class:"form-item"},{default:u(()=>[n(r(y),{value:t.value.filter,"onUpdate:value":l[2]||(l[2]=p=>t.value.filter=p),placeholder:"BPF 过滤表达式,如 'host 192.168.1.1' 或 'port 80'(可选)",disabled:a.value,size:"large"},null,8,["value","disabled"]),l[10]||(l[10]=e("div",{class:"form-help"},"使用 BPF 语法过滤数据包",-1))]),_:1}),n(r(b),{label:"额外参数",name:"extra_args",class:"form-item"},{default:u(()=>[n(r(y),{value:t.value.extra_args,"onUpdate:value":l[3]||(l[3]=p=>t.value.extra_args=p),placeholder:"tcpdump 的额外命令行参数(可选)",disabled:a.value,size:"large"},null,8,["value","disabled"]),l[11]||(l[11]=e("div",{class:"form-help"},"如 '-v -n -X' 等参数",-1))]),_:1}),n(r(b),{label:"Sudo密码",name:"password",class:"form-item"},{default:u(()=>[n(r(y).Password,{value:t.value.password,"onUpdate:value":l[4]||(l[4]=p=>t.value.password=p),placeholder:"请输入sudo密码(可选)",disabled:a.value,size:"large"},null,8,["value","disabled"]),l[12]||(l[12]=e("div",{class:"form-help"}," 用于执行需要管理员权限的tcpdump命令 ",-1))]),_:1}),n(r(b),{label:"抓包时长",name:"duration",required:"",class:"form-item"},{default:u(()=>[n(r(y),{value:t.value.duration,"onUpdate:value":l[5]||(l[5]=p=>t.value.duration=p),placeholder:"抓包持续时间(秒)",type:"number",min:1,max:300,disabled:a.value,size:"large"},null,8,["value","disabled"]),l[13]||(l[13]=e("div",{class:"form-help"},"必填项,范围:1-300 秒",-1))]),_:1}),n(r(b),{class:"submit-section"},{default:u(()=>[n(r(C),{type:"primary",onClick:M,loading:f.value,disabled:a.value,size:"large",class:"submit-btn"},{default:u(()=>[f.value?S("",!0):(w(),P(r(ae),{key:0})),c(" "+k(f.value?"抓包中...":"开始抓包"),1)]),_:1},8,["loading","disabled"])]),_:1})]),_:1},8,["model","disabled"])]),_:1})]),e("div",ve,[n(r(O),{title:"使用说明",class:"help-card"},{default:u(()=>l[14]||(l[14]=[e("div",{class:"help-content"},[e("div",{class:"help-item"},[e("h4",null,"网络接口"),e("p",null," 指定要监听的网络接口,如 eth0、wlan0 等。留空则使用系统默认接口。 ")]),e("div",{class:"help-item"},[e("h4",null,"过滤条件"),e("p",null," 使用 BPF(Berkeley Packet Filter)语法过滤数据包。常用示例: "),e("ul",{class:"help-list"},[e("li",null,[e("code",null,"host 192.168.1.1"),c(" - 只抓取与指定主机通信的数据包 ")]),e("li",null,[e("code",null,"port 80"),c(" - 只抓取 80 端口的数据包")]),e("li",null,[e("code",null,"tcp and port 443"),c(" - 只抓取 HTTPS 流量")]),e("li",null,[e("code",null,"icmp"),c(" - 只抓取 ICMP 数据包(ping)")])])]),e("div",{class:"help-item"},[e("h4",null,"额外参数"),e("p",null,"tcpdump 的其他命令行参数,如:"),e("ul",{class:"help-list"},[e("li",null,[e("code",null,"-v"),c(" - 详细输出")]),e("li",null,[e("code",null,"-n"),c(" - 不解析主机名")]),e("li",null,[e("code",null,"-X"),c(" - 以十六进制和 ASCII 显示数据包内容 ")])])]),e("div",{class:"help-item"},[e("h4",null,"Sudo密码"),e("p",null," 用于执行需要管理员权限的tcpdump命令。如果系统配置了免密sudo或当前用户有足够权限,可以留空。 ")]),e("div",{class:"help-item"},[e("h4",null,"抓包时长"),e("p",null," 指定抓包的持续时间,单位为秒。抓包完成后会自动下载结果文件。 ")])],-1)])),_:1})])])]),_:1})])]),_:1})]),_:1}))}});const Be=H(ge,[["__scopeId","data-v-a3cbb038"]]);export{Be as default};
  2. //# sourceMappingURL=tcpdump-3dde7de7.js.map