Board logo

标题: [网络连接] 谁可以解释下批处理版QQ好友IP查看器? [打印本页]

作者: kevinm    时间: 2009-12-11 21:56     标题: 谁可以解释下批处理版QQ好友IP查看器?

  1. echo off
  2. Title QQ好友IP查看器       by:ghost98
  3. color 02
  4. mode con cols=90 lines=30
  5. :begin
  6. cls
  7. echo.
  8. echo.
  9. tasklist | findstr "QQ.exe">QPID.log
  10. for /f "tokens=2 delims= " %%a in (QPID.log) do (echo %%a>QPID.log&set /p
  11. QPID=<QPID.log&del /f /q QPID.log)
  12. echo.
  13. echo.
  14. echo   协议   本地IP:端口            对方IP:端口            连接状态       进程号
  15. echo.
  16. netstat /ano | findstr "%QPID%"
  17. echo.
  18. echo.
  19. pause
  20. goto begin
复制代码

作者: neorobin    时间: 2009-12-11 23:51

tasklist 的输出示例
C:\>tasklist
图像名 PID 会话名 会话# 内存使用
========================= ====== ================ ======== ============
System Idle Process 0 Console 0 28 K
System 4 Console 0 316 K
SMSS.EXE 748 Console 0 404 K
CSRSS.EXE 812 Console 0 5,844 K
WINLOGON.EXE 836 Console 0 3,044 K
SERVICES.EXE 880 Console 0 3,900 K


运行下面的, 你可以看到一批 *.exe 的进程信息
  1. tasklist | findstr ".exe">QPID.log & notepad qpid.log
复制代码
如果运行的是下面的 (tasklist | findstr /i "qq.exe">QPID.log 注意: 参数 /i 的重要性, 你贴的原始代码中没有这个参数, 那样不能忽略大小写)
  1. tasklist | findstr /i "qq.exe">QPID.log
  2. notepad qpid.log
复制代码
在记事本里可看到一或几行 *QQ.exe 的进程信息, 再运行下面的
  1. for /f "tokens=2 delims= " %a in (QPID.log) do (echo %a>QPID.log&set /p qpid=<qpid.log)
  2. write qpid.log
  3. echo qpid=%qpid%
复制代码
你可以看到记事本打开的文件中 第一行(可能只有一行) 就是 *qq.exe 后面有它的 PID
*qq.exe 和它后面的 PID 之间有若干空格(delims= " 指定令牌分隔符为空格), 这就让 *QQ.exe 成为第一个令牌, 而 PID 值成为第二个令牌,
(tokens=2 指定只取第 2 个令牌)
  1. for /f "tokens=2 delims= " %a in (QPID.log) do (echo %a>QPID.log)
复制代码

这一句让 QPID.LOG 在 %a 取得第二个令牌的值即 *QQ.exe 的 PID 时, 把这个值输出到 QPID.LOG 文件中, 得以更新,当然这一句
  1. set /p qpid=<qpid.log
复制代码
是在文件更新后同步立即执行的. 你可以看到, 在(命令行直接粘贴)运行上面的几段代码后, 记事本打开的文件中有一或几行信息, 而写字板打开的文件中 只会有一个数字,
这个数字就是 *QQ.exe 的 PID (进程ID)

接下来, 这一句
  1. set /p qpid=<qpid.log
复制代码
将更新后的 QPID.LOG 文件中的数据即唯一的一个 PID 的值 赋给了 变量 QPID,
在命令行里, 你可以看到 qpid=nnn (nnn 代指一个不确定的数字)

接下来就是 netstat 的任务了, 代码中用了下面 3 个参数, 你也可以 netstat /? 自己看说明
  -a            显示所有连接和监听端口。
  -n            以数字形式显示地址和端口号。
  -o            显示与每个连接相关的所属进程 ID。

到这里, 我想你该明白了.

[ 本帖最后由 neorobin 于 2009-12-12 00:48 编辑 ]
作者: kevinm    时间: 2009-12-12 13:39

解释的非常好 非常感谢




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2