IPアドレスが正しい形式かチェックする為、IPAddress.Parseを使おうと思ったのですが、なぜか思ったような挙動にならなかったので自分で作りました。
普通はIPAddress.Parseを使用して形式が正しいかチェックすると思います。
それを踏まえて以下をどうぞ。

受け取ったIPアドレスがxxx.xxx.xxx.xxx(0<=x<=255)かチェックし、正しければtrueを返すメソッドです。

/// <summary>
/// IPアドレスの形式になっているかチェック
/// </summary>
/// <param name="ip">IPアドレス</param>
/// <returns>t/f</returns>
public bool CheckIPAddress(string ip)
{

    //「.」の数を数える
    int count = ip.Length - ip.Replace(".".ToString(), "").Length;

    //「.」の数をチェック
    if (count != 3)
    {
        //「.」が3つではない場合
        return false;
    }

    // 「.」で分割して配列に格納する
    string[] ipSplitData = ip.Split('.');

    // データを確認する
    foreach (string data in ipSplitData)
    {
        // 数字以外が入力されていないかチェック
        try
        {
            // キャストして数字かチェック
            int.Parse(data);
        }
        catch
        {
            // 空白や文字列などが入力されていた場合
            return false;
        }

        // 0~255の範囲内かチェック
        if (int.Parse(data) < 0 || int.Parse(data) > 255)
        {
            // 0~255ではない場合
            return false;
        }
    }

    // IPアドレス形式の場合
    return true;
}

以上。