diff --git a/homeassistant/components/sonos/__init__.py b/homeassistant/components/sonos/__init__.py
index d530fa21e39f0184efdc52733b3914a3ae6e0e9b..24580971ae28ca26d03e2a3fb0c60a624da4e10b 100644
--- a/homeassistant/components/sonos/__init__.py
+++ b/homeassistant/components/sonos/__init__.py
@@ -7,6 +7,7 @@ from collections import OrderedDict
 from dataclasses import dataclass, field
 import datetime
 from functools import partial
+from ipaddress import AddressValueError, IPv4Address
 import logging
 import socket
 from typing import Any, cast
@@ -208,6 +209,14 @@ class SonosDiscoveryManager:
 
     async def async_subscribe_to_zone_updates(self, ip_address: str) -> None:
         """Test subscriptions and create SonosSpeakers based on results."""
+        try:
+            _ = IPv4Address(ip_address)
+        except AddressValueError:
+            _LOGGER.debug(
+                "Sonos integration only supports IPv4 addresses, invalid ip_address received: %s",
+                ip_address,
+            )
+            return
         soco = SoCo(ip_address)
         # Cache now to avoid household ID lookup during first ZoneGroupState processing
         await self.hass.async_add_executor_job(
diff --git a/homeassistant/components/sonos/config_flow.py b/homeassistant/components/sonos/config_flow.py
index 057cdb8ec08c3f1490104321491c9cbae9ee2b0b..b5e2c684281a9e1c7ad555b97dfe31dde7c43ffa 100644
--- a/homeassistant/components/sonos/config_flow.py
+++ b/homeassistant/components/sonos/config_flow.py
@@ -31,6 +31,8 @@ class SonosDiscoveryFlowHandler(DiscoveryFlowHandler[Awaitable[bool]], domain=DO
         hostname = discovery_info.hostname
         if hostname is None or not hostname.lower().startswith("sonos"):
             return self.async_abort(reason="not_sonos_device")
+        if discovery_info.ip_address.version != 4:
+            return self.async_abort(reason="not_ipv4_address")
         if discovery_manager := self.hass.data.get(DATA_SONOS_DISCOVERY_MANAGER):
             host = discovery_info.host
             mdns_name = discovery_info.name
diff --git a/homeassistant/components/sonos/strings.json b/homeassistant/components/sonos/strings.json
index 07d2e2db4e06ef13646f756f1290f9b819ad63c6..433bb3cc36aaa108532860d930e0c883cee30797 100644
--- a/homeassistant/components/sonos/strings.json
+++ b/homeassistant/components/sonos/strings.json
@@ -8,7 +8,8 @@
     "abort": {
       "not_sonos_device": "Discovered device is not a Sonos device",
       "single_instance_allowed": "[%key:common::config_flow::abort::single_instance_allowed%]",
-      "no_devices_found": "[%key:common::config_flow::abort::no_devices_found%]"
+      "no_devices_found": "[%key:common::config_flow::abort::no_devices_found%]",
+      "not_ipv4_address": "No IPv4 address in SSDP discovery information"
     }
   },
   "issues": {
diff --git a/tests/components/sonos/test_config_flow.py b/tests/components/sonos/test_config_flow.py
index 70605092da1bc1898377780a1d04f8300e5f7b94..8454b4ad6737581dd2bcaa704e1503b9d8aeb096 100644
--- a/tests/components/sonos/test_config_flow.py
+++ b/tests/components/sonos/test_config_flow.py
@@ -123,6 +123,22 @@ async def test_zeroconf_form(
     assert len(mock_manager.mock_calls) == 2
 
 
+async def test_zeroconf_form_not_ipv4(
+    hass: HomeAssistant, zeroconf_payload: ZeroconfServiceInfo
+) -> None:
+    """Test we pass Zeroconf discoveries to the manager."""
+    mock_manager = hass.data[DATA_SONOS_DISCOVERY_MANAGER] = MagicMock()
+    zeroconf_payload.ip_address = ip_address("2001:db8:3333:4444:5555:6666:7777:8888")
+    result = await hass.config_entries.flow.async_init(
+        DOMAIN,
+        context={"source": config_entries.SOURCE_ZEROCONF},
+        data=zeroconf_payload,
+    )
+    assert result["type"] is FlowResultType.ABORT
+    assert result["reason"] == "not_ipv4_address"
+    assert mock_manager.call_count == 0
+
+
 async def test_ssdp_discovery(hass: HomeAssistant, soco) -> None:
     """Test that SSDP discoveries create a config flow."""
 
diff --git a/tests/components/sonos/test_init.py b/tests/components/sonos/test_init.py
index a7ad2f4cb82b2b39535c69b7437835efbabb066b..c6be606eb201bdce993527cecc590ab288073e0b 100644
--- a/tests/components/sonos/test_init.py
+++ b/tests/components/sonos/test_init.py
@@ -455,3 +455,32 @@ async def test_async_poll_manual_hosts_8(
     assert "media_player.garage" in entity_registry.entities
     assert "media_player.studio" in entity_registry.entities
     await hass.async_block_till_done(wait_background_tasks=True)
+
+
+async def _setup_hass_ipv6_address_not_supported(hass: HomeAssistant):
+    await async_setup_component(
+        hass,
+        sonos.DOMAIN,
+        {
+            "sonos": {
+                "media_player": {
+                    "interface_addr": "127.0.0.1",
+                    "hosts": ["2001:db8:3333:4444:5555:6666:7777:8888"],
+                }
+            }
+        },
+    )
+    await hass.async_block_till_done()
+
+
+async def test_ipv6_not_supported(
+    hass: HomeAssistant,
+    caplog: pytest.LogCaptureFixture,
+) -> None:
+    """Tests that invalid ipv4 addresses do not generate stack dump."""
+    with caplog.at_level(logging.DEBUG):
+        caplog.clear()
+        await _setup_hass_ipv6_address_not_supported(hass)
+        await hass.async_block_till_done()
+    assert "invalid ip_address received" in caplog.text
+    assert "2001:db8:3333:4444:5555:6666:7777:8888" in caplog.text