(I)由已知 $a_n^2 + 2a_n = 4S_n + 3$ ①,
当 $n \ge 2$ 时,有 $a_{n-1}^2 + 2a_{n-1} = 4S_{n-1} + 3$ ②。
① - ② 得:$a_n^2 - a_{n-1}^2 + 2(a_n - a_{n-1}) = 4(S_n - S_{n-1})$。
因为 $S_n - S_{n-1} = a_n$,所以 $a_n^2 - a_{n-1}^2 + 2(a_n - a_{n-1}) = 4a_n$。
整理得:$(a_n - a_{n-1})(a_n + a_{n-1}) + 2(a_n - a_{n-1}) - 4a_n = 0$ 此路不通,重新整理:
$a_n^2 - a_{n-1}^2 + 2a_n - 2a_{n-1} = 4a_n$
$a_n^2 - a_{n-1}^2 - 2a_n - 2a_{n-1} = 0$
$(a_n - a_{n-1})(a_n + a_{n-1}) - 2(a_n + a_{n-1}) = 0$
$(a_n + a_{n-1})(a_n - a_{n-1} - 2) = 0$
因为 $a_n > 0$,所以 $a_n + a_{n-1} > 0$,故 $a_n - a_{n-1} - 2 = 0$,即 $a_n - a_{n-1} = 2$ ($n \ge 2$)。
这说明数列 $\{a_n\}$ 从第2项起是公差为2的等差数列。
再求首项 $a_1$:
在 ① 中令 $n=1$,得 $a_1^2 + 2a_1 = 4a_1 + 3$,即 $a_1^2 - 2a_1 - 3 = 0$。
解得 $a_1 = 3$ 或 $a_1 = -1$。
因为 $a_n > 0$,所以 $a_1 = 3$。
验证 $a_2 - a_1 = 2 \Rightarrow a_2 = 5$。
由通项公式 $a_n = a_1 + (n-1)d = 3 + 2(n-1) = 2n + 1$。
经检验,$a_n = 2n+1$ 满足原递推关系。
故 $\{a_n\}$ 的通项公式为 $a_n = 2n + 1$。
(II)由(I)知 $a_n = 2n + 1$,则 $a_{n+1} = 2n + 3$。
所以 $b_n = \frac{1}{a_n a_{n+1}} = \frac{1}{(2n+1)(2n+3)}$。
利用裂项相消法,$\frac{1}{(2n+1)(2n+3)} = \frac{1}{2} \left( \frac{1}{2n+1} - \frac{1}{2n+3} \right)$。
设数列 $\{b_n\}$ 的前 $n$ 项和为 $T_n$,则:
$$
\begin{aligned}
T_n &= \sum_{k=1}^n b_k \\
&= \frac{1}{2} \left[ \left( \frac{1}{3} - \frac{1}{5} \right) + \left( \frac{1}{5} - \frac{1}{7} \right) + \cdots + \left( \frac{1}{2n+1} - \frac{1}{2n+3} \right) \right] \\
&= \frac{1}{2} \left( \frac{1}{3} - \frac{1}{2n+3} \right) \\
&= \frac{1}{2} \cdot \frac{2n+3-3}{3(2n+3)} \\
&= \frac{1}{2} \cdot \frac{2n}{3(2n+3)} \\
&= \frac{n}{3(2n+3)}
\end{aligned}
$$
故数列 $\{b_n\}$ 的前 $n$ 项和为 $\frac{n}{3(2n+3)}$。