2025年4月16日水曜日

原因不明だがWindows 10やWindows 11がUDPでブロードキャストしまくる件の暫定対応

組み込み系機器(Wi-Fi APなど)がネットワークに繋がらなくなったりフリーズしたりする症状が発生したのでWiresharkで覗いたところ、Windows 11マシンがやたら22222ポートと10004ポート、3289ポート宛にUDPでブロードキャストしていた。
Windows 10では起きていない感じだが詳細不明。

とりあえず発生しているマシンで以下のプログラムを管理者権限で動かしてもらい上記ブロードキャストを強制的に発信しないようにしてもらった。

下記のプログラムをコンパイルするにはVisual Studio 2022にて「コンソールアプリ(.NET Framework)Visual Basic」でプロジェクトを作ってCOMのNetFwTypeLibを参照する必要があります。

Imports NetFwTypeLib

Module Module1

    'Private Const NET_FW_IP_PROTOCOL_ICMPv4 = 1
    'Private Const NET_FW_IP_PROTOCOL_TCP = 6
    Private Const NET_FW_IP_PROTOCOL_UDP = 17
    Private Const NET_FW_ACTION_BLOCK = 0
    'Private Const NET_FW_ACTION_ALLOW = 1
    'Private Const NET_FW_RULE_DIR_IN = 1
    Private Const NET_FW_RULE_DIR_OUT = 2
    'Private Const NET_FW_PROFILE2_DOMAIN = 1
    'Private Const NET_FW_PROFILE2_PRIVATE = 2
    'Private Const NET_FW_PROFILE2_PUBLIC = 4
    Private Const NET_FW_PROFILE2_ALL = &H7FFFFFFF

    Public Sub BlockUDP(ByVal RuleName As String, ByVal RuleDescription As String, ByVal RulePort As Long)

        Dim fwPolicy2 As Object = CreateObject("HNetCfg.FwPolicy2")
        Dim NewRule As Object = CreateObject("HNetCfg.FWRule")
        Dim RulesObject As Object = fwPolicy2.Rules

        NewRule.Name = RuleName
        NewRule.Description = RuleDescription
        NewRule.Protocol = NET_FW_IP_PROTOCOL_UDP
        NewRule.Direction = NET_FW_RULE_DIR_OUT
        NewRule.RemotePorts = RulePort
        NewRule.Grouping = "@firewallapi.dll,-23255"
        NewRule.Profiles = NET_FW_PROFILE2_ALL
        NewRule.Enabled = True
        NewRule.Action = NET_FW_ACTION_BLOCK

        Try
            RulesObject.Add(NewRule)
        Catch ex As Exception
            WriteLine(ex.Message & vbNewLine & ex.StackTrace)
        End Try

    End Sub

    Sub Main()

        BlockUDP("Block 22222", "", 22222)
        BlockUDP("Block 10004", "", 10004)
        BlockUDP("Block 3289", "", 3289) 'ADD NEW
        
    End Sub

End Module