yigeren 发表于 2021-10-4 15:07:57

求一段PECMD检测外网的脚本

本帖最后由 yigeren 于 2021-12-31 15:12 编辑

需要一段PECMD代码来检测外网连接的状态,如果检测到有连接外网了就执行A条件,检测不到外网就执行B条件

已搞定,代码如下:

EXEC -err+ !=ping www.baidu.com
IFEX #%error%=0,MESS 有外网连接@连接状态!MESS 无外网连接@连接状态



2012jiashanni 发表于 2021-10-4 18:06:07

LOGS *E:\X.LOG
ENVI$ NL=0d 0a
ENVI&::SO_REUSEADDR=4   //允许重新监视地址
CALL @WIN1

_SUB WIN1,W494H442,新窗口1,CALL OnQuit,
    SOCK sk   //监听
    SOCK sr   //接收
    SOCK sc   //发送
    EDIT &TOIP,L112T18W86H32,127.0.0.1,,
    EDIT &TOPORT,L212T18W60H30,6002,,
    EDIT &MYIP,L109T178W88H30,0.0.0.0,,
    EDIT &MYPORT,L212T180W58H30,6001,,
    MEMO &RMSG,L57T55W381H94,,,0x40
    MEMO &SMSG,L64T218W366H132,HELLO%NL%,,
    ITEM &ITEM8,L208T368W60H30,发送,CALL OnSend,
    ENVI &&OldMYIP=%&MYIP%
    ENVI &&OldMYPORT=%&MYPORT%
    ENVI &&OldTOIP=
    ENVI &&OldTOPORT=
    ENVI &&bListen=0
    ENVI$ &&BRMSG=*4096 0 //接收缓冲取
    ENVI @this.MSG=#1: CALL OnRecv
    ENVI @this.MSG=#2: CALL OnServer
    //CALL OnServer
    ITEM &BUTLISTEN,L375T182W60H30,监听,CALL OnListen,
    EDIT &MYIP2,L276T181W88H30,,,
    EDIT &TOIP2,L275T20W86H30,,,
    LABE LABE4,L58T19W43H30,对方:,,
    LABE LABE5,L59T178W44H30,本方:,,
_END
_SUB OnRecv
    ENVI @&RMSG=%&RMSG%%&BRMSG%
_END

_SUB OnQuit
    ENVI &bListen=-1
    ENVI @sk.close=
    ENVI @sr.close=
    ENVI @sc.close=
_END

_SUB OnListen
    IFEX $ 0 > %&bListen%, EXIT _SUB
    FIND $ 0 = %&bListen%, TEAM CALL OnServer| EXIT _SUB
    TEAM ENVI &bListen=0| ENVI @sk.close=| ENVI @sr.close= //连接断开,会自动连上。
    //ENVI @&BUTLISTEN.Enable=0//禁止
_END
_SUB OnServer
    IFEX $ 0 > %&bListen%, EXIT _SUB
    ENVI @sk.sock=&&err
    ENVI#$ &&v=1   
    ENVI @sk.setsockopt=&&err;;%&SO_REUSEADDR%,&v//允许重新监视地址
    ENVI &OldMYIP=%&MYIP%
    ENVI &OldMYPORT=%&MYPORT%
    ENVI @sk.bind=&&err;%&MYIP%;%&MYPORT%
    ENVI @sk.listen=&&err;1
    ENVI @WIN1=%&OldMYPORT%/%&OldMYIP%
    ENVI &bListen=1
    ENVI @&BUTLISTEN=监听中
    THREAD* CALLServer
_END

_SUB OnCLient
    ENVI @sc.shutdown= //友好关闭
    WAIT 30
//    MESS ---wait 111
    ENVI @sc.sock=&&err
    ENVI @sc.connect=&&err;%&TOIP%;%&TOPORT%
    ENVI &OldTOIP=%&TOIP%
    ENVI &OldTOPORT=%&TOPORT%
_END

_SUB OnSend
    //ENVI&&bOld=0
    //FIND $%&OldTOIP% = %TOIP%,!!FIND $%&OldTOPORT% = %TOPORT%,!! ENVI&&bOld=1
    //FIND $0 = %bOld%,   CALLOnCLient
    CALLOnCLient
    ENVI &&Len=0
    ENVI &&MSG=%&SMSG%
    ENVI @sc.write=&&err;&Len;&MSG
_END

_SUB Server
    LOOP # %&bListen% = 1,
    {
    ENVI &=&bListen=%&bListen%
      ENVI @sk.fd=&&fd
      ENVI &&err=0
      ENVI &&Len=0
      //MESS -- accept
      ENVI @sr.accept=&&err;%&&fd%
      ENVI @sr.getname=;0;&&ip1//本地实际IP
      ENVI @&MYIP2=%&ip1%
      ENVI @sr.getname=;1;&&ip2//对方实际IP
      ENVI @&TOIP2=%&ip2%
      ENVI &&OK=1
      LOOP $ 11 = %&bListen%%&OK%,
      {
            ENVI &err=0
            ENVI @sr.read=&err;&Len;&BRMSG
            IFEX $ %&Len% > 0,ENVI @WIN1.SENDMSG=#1 //OnRecv
            IFEX $ %&Len% <= 0, ENVI &OK=0
            WAIT 1
            //MESS --&Len[ %&Len%]   &bListen[%&bListen%]&OK[%&OK%] &err[%&err%]
      }
      WAIT 2
    }
    ENVI @&BUTLISTEN=监听
    //MESS监听结束
    //IFEX $ %&bListen% = 0,ENVI @WIN1.SENDMSG=#2 //OnServer
_END


   


yigeren 发表于 2021-10-4 19:53:34

先谢谢了,不过不是要这效果的,是类似CMD脚本这种简单的
ping www.baidu.com -n 1 | find "TTL"
if errorlevel 0 goto :on
if errorlevel 1 goto :off
PECMD的不懂怎么写

lily9718 发表于 2021-10-5 06:27:49

帮顶

心无痕 发表于 2021-10-5 08:31:36

来看看高手的解答!!!!

2011slkj 发表于 2021-10-6 15:22:09

2012jiashanni 发表于 2021-10-4 18:06
LOGS *E:\X.LOG
ENVI$ NL=0d 0a
ENVI&::SO_REUSEADDR=4   //允许重新监视地址


smss 发表于 2022-4-22 23:09:02

SOCK --gethostbyname# &V;www.baidu.com
IFEX #%&V%>0,MESS 有!MESS 无
比之前这个好点{:1_194:}

zyy 发表于 2023-12-7 21:03:52

EXEC -err+ !=ping www.baidu.com
IFEX #%error%=0,MESS 有外网连接@连接状态!MESS 无外网连接@连接状态

谢谢分享 Win11PE有效{:1_186:}

zyy 发表于 2023-12-7 21:12:13

smss 发表于 2022-4-22 23:09
比之前这个好点

谢谢分享 Win11PE有效

2012hsj17 发表于 2023-12-7 21:54:11

yigeren 发表于 2021-10-4 19:53
先谢谢了,不过不是要这效果的,是类似CMD脚本这种简单的
ping www.baidu.com -n 1 | find "TTL"
if erro ...

ping www.baidu.com -n 1可能不行。第一次链接的延时可能会高,甚至失败。

a316924197 发表于 2023-12-12 09:11:23

2012jiashanni 发表于 2021-10-4 18:06
LOGS *E:\X.LOG
ENVI$ NL=0d 0a
ENVI&::SO_REUSEADDR=4   //允许重新监视地址


真不错,必须点个赞
页: [1]
查看完整版本: 求一段PECMD检测外网的脚本