diff --git a/Source/NETworkManager.Models/Export/ExportManager.ConnectionInfo.cs b/Source/NETworkManager.Models/Export/ExportManager.ConnectionInfo.cs index 7a7c0e2924..bb001c7a19 100644 --- a/Source/NETworkManager.Models/Export/ExportManager.ConnectionInfo.cs +++ b/Source/NETworkManager.Models/Export/ExportManager.ConnectionInfo.cs @@ -51,7 +51,7 @@ private static void CreateCsv(IEnumerable collection, string fil foreach (var info in collection) stringBuilder.AppendLine( - $"{info.Protocol},{info.LocalIPAddress},{info.LocalPort},{info.RemoteIPAddress},{info.RemotePort},{info.RemoteHostname},{info.TcpState},{info.ProcessId},{info.ProcessName},{info.ProcessPath}"); + $"{info.Protocol},{info.LocalIPAddress},{info.LocalPort},{info.RemoteIPAddress},{info.RemotePort},{EscapeCsvValue(info.RemoteHostname)},{info.TcpState},{info.ProcessId},{EscapeCsvValue(info.ProcessName)},{EscapeCsvValue(info.ProcessPath)}"); File.WriteAllText(filePath, stringBuilder.ToString()); } diff --git a/Source/NETworkManager.Models/Export/ExportManager.DNSLookupRecordInfo.cs b/Source/NETworkManager.Models/Export/ExportManager.DNSLookupRecordInfo.cs index 7e56e5bc40..7a257e7ea9 100644 --- a/Source/NETworkManager.Models/Export/ExportManager.DNSLookupRecordInfo.cs +++ b/Source/NETworkManager.Models/Export/ExportManager.DNSLookupRecordInfo.cs @@ -51,7 +51,7 @@ private static void CreateCsv(IEnumerable collection, strin foreach (var info in collection) stringBuilder.AppendLine( - $"{info.DomainName},{info.TTL},{info.RecordClass},{info.RecordType},{info.Result},{info.NameServerIPAddress},{info.NameServerHostName},{info.NameServerPort}"); + $"{EscapeCsvValue(info.DomainName)},{info.TTL},{info.RecordClass},{info.RecordType},{EscapeCsvValue(info.Result)},{info.NameServerIPAddress},{EscapeCsvValue(info.NameServerHostName)},{info.NameServerPort}"); File.WriteAllText(filePath, stringBuilder.ToString()); } diff --git a/Source/NETworkManager.Models/Export/ExportManager.DiscoveryProtocolPackageInfo.cs b/Source/NETworkManager.Models/Export/ExportManager.DiscoveryProtocolPackageInfo.cs index 9e58a7f136..a317ac7cb1 100644 --- a/Source/NETworkManager.Models/Export/ExportManager.DiscoveryProtocolPackageInfo.cs +++ b/Source/NETworkManager.Models/Export/ExportManager.DiscoveryProtocolPackageInfo.cs @@ -52,7 +52,7 @@ private static void CreateCsv(IEnumerable collecti foreach (var info in collection) stringBuilder.AppendLine( - $"{info.Device},{info.DeviceDescription},{info.Port},{info.PortDescription},{info.Model},{info.VLAN},{info.IPAddress},{info.Protocol},{info.TimeToLive}"); + $"{EscapeCsvValue(info.Device)},{EscapeCsvValue(info.DeviceDescription)},{EscapeCsvValue(info.Port)},{EscapeCsvValue(info.PortDescription)},{EscapeCsvValue(info.Model)},{info.VLAN},{info.IPAddress},{info.Protocol},{info.TimeToLive}"); File.WriteAllText(filePath, stringBuilder.ToString()); } diff --git a/Source/NETworkManager.Models/Export/ExportManager.HostsFileEntry.cs b/Source/NETworkManager.Models/Export/ExportManager.HostsFileEntry.cs index 2eb7ae3e58..1c49fe40ab 100644 --- a/Source/NETworkManager.Models/Export/ExportManager.HostsFileEntry.cs +++ b/Source/NETworkManager.Models/Export/ExportManager.HostsFileEntry.cs @@ -49,7 +49,7 @@ private static void CreateCsv(IEnumerable collection, string fil $"{nameof(HostsFileEntry.IsEnabled)},{nameof(HostsFileEntry.IPAddress)},{nameof(HostsFileEntry.Hostname)},{nameof(HostsFileEntry.Comment)}"); foreach (var info in collection) - stringBuilder.AppendLine($"{info.IsEnabled},{info.IPAddress},{info.Hostname},{info.Comment}"); + stringBuilder.AppendLine($"{info.IsEnabled},{info.IPAddress},{EscapeCsvValue(info.Hostname)},{EscapeCsvValue(info.Comment)}"); File.WriteAllText(filePath, stringBuilder.ToString()); } diff --git a/Source/NETworkManager.Models/Export/ExportManager.IPGeolocationInfo.cs b/Source/NETworkManager.Models/Export/ExportManager.IPGeolocationInfo.cs index b54a3cb185..940840d0ad 100644 --- a/Source/NETworkManager.Models/Export/ExportManager.IPGeolocationInfo.cs +++ b/Source/NETworkManager.Models/Export/ExportManager.IPGeolocationInfo.cs @@ -50,7 +50,7 @@ private static void CreateCsv(IEnumerable collection, string foreach (var info in collection) stringBuilder.AppendLine( - $"{info.Status},{info.Continent},{info.ContinentCode},{info.Country},{info.CountryCode},{info.Region},{info.RegionName},{info.City},{info.District},{info.Zip},{info.Lat},{info.Lon},{info.Timezone},{info.Offset},{info.Currency},{info.Isp},{info.Org},{info.As},{info.Asname},{info.Reverse},{info.Mobile},{info.Proxy},{info.Hosting},{info.Query}"); + $"{info.Status},{EscapeCsvValue(info.Continent)},{info.ContinentCode},{EscapeCsvValue(info.Country)},{info.CountryCode},{EscapeCsvValue(info.Region)},{EscapeCsvValue(info.RegionName)},{EscapeCsvValue(info.City)},{EscapeCsvValue(info.District)},{info.Zip},{info.Lat},{info.Lon},{EscapeCsvValue(info.Timezone)},{info.Offset},{EscapeCsvValue(info.Currency)},{EscapeCsvValue(info.Isp)},{EscapeCsvValue(info.Org)},{EscapeCsvValue(info.As)},{EscapeCsvValue(info.Asname)},{EscapeCsvValue(info.Reverse)},{info.Mobile},{info.Proxy},{info.Hosting},{info.Query}"); File.WriteAllText(filePath, stringBuilder.ToString()); } diff --git a/Source/NETworkManager.Models/Export/ExportManager.IPNetworkInfo.cs b/Source/NETworkManager.Models/Export/ExportManager.IPNetworkInfo.cs index 3035290ac6..7af1f7de6b 100644 --- a/Source/NETworkManager.Models/Export/ExportManager.IPNetworkInfo.cs +++ b/Source/NETworkManager.Models/Export/ExportManager.IPNetworkInfo.cs @@ -63,7 +63,7 @@ private static void CreateCsv(IEnumerable collection, string file private static void CreateXml(IEnumerable collection, string filePath) { var document = new XDocument(DefaultXDeclaration, - new XElement(ApplicationName.SNMP.ToString(), + new XElement(ApplicationName.SubnetCalculator.ToString(), new XElement(nameof(IPNetworkInfo) + "s", from info in collection select diff --git a/Source/NETworkManager.Models/Export/ExportManager.IPScannerHostInfo.cs b/Source/NETworkManager.Models/Export/ExportManager.IPScannerHostInfo.cs index ee73c15f40..6cdd306b28 100644 --- a/Source/NETworkManager.Models/Export/ExportManager.IPScannerHostInfo.cs +++ b/Source/NETworkManager.Models/Export/ExportManager.IPScannerHostInfo.cs @@ -89,25 +89,25 @@ private static void CreateCsv(IEnumerable collection, string stringBuilder.AppendLine( $"{info.IsReachable}," + $"{info.PingInfo.IPAddress}," + - $"{info.Hostname}," + + $"{EscapeCsvValue(info.Hostname)}," + $"{info.PingInfo.Status}," + $"{DateTimeHelper.DateTimeToFullDateTimeString(info.PingInfo.Timestamp)}," + $"{Ping.TimeToString(info.PingInfo.Status, info.PingInfo.Time, true)}," + $"{info.PingInfo.TTL}," + $"{info.PingInfo.Bytes}," + $"{(info.IsAnyPortOpen ? PortState.Open : PortState.Closed)}," + - $"\"{stringBuilderPorts.ToString().TrimEnd(';')}\"," + + $"{EscapeCsvValue(stringBuilderPorts.ToString().TrimEnd(';'))}," + $"{info.NetBIOSInfo?.IsReachable}," + $"{info.NetBIOSInfo?.IPAddress}," + - $"{info.NetBIOSInfo?.ComputerName}," + - $"{info.NetBIOSInfo?.UserName}," + - $"{info.NetBIOSInfo?.GroupName}," + + $"{EscapeCsvValue(info.NetBIOSInfo?.ComputerName)}," + + $"{EscapeCsvValue(info.NetBIOSInfo?.UserName)}," + + $"{EscapeCsvValue(info.NetBIOSInfo?.GroupName)}," + $"{info.NetBIOSInfo?.MACAddress}," + - $"{info.NetBIOSInfo?.Vendor}," + + $"{EscapeCsvValue(info.NetBIOSInfo?.Vendor)}," + $"{info.MACAddress}," + - $"\"{info.Vendor}\"," + + $"{EscapeCsvValue(info.Vendor)}," + $"{info.ARPMACAddress}," + - $"\"{info.ARPVendor}\"" + $"{EscapeCsvValue(info.ARPVendor)}" ); } diff --git a/Source/NETworkManager.Models/Export/ExportManager.NetworkInterface.cs b/Source/NETworkManager.Models/Export/ExportManager.NetworkInterface.cs index 6b28e6b4f9..e7d54ce4f2 100644 --- a/Source/NETworkManager.Models/Export/ExportManager.NetworkInterface.cs +++ b/Source/NETworkManager.Models/Export/ExportManager.NetworkInterface.cs @@ -50,8 +50,7 @@ private static void CreateCsv(IEnumerable collection, stri foreach (var info in collection) stringBuilder.AppendLine( - $"{info.Id},{info.Name},{info.Description},{info.Type},{info.PhysicalAddress},{info.Status},{info.IsOperational},{info.Speed},{info.IPv4ProtocolAvailable},{IPv4Address.ConvertIPAddressWithSubnetmaskListToString(info.IPv4Address, ";")},{IPv4Address.ConvertIPAddressListToString(info.IPv4Gateway, ";")},{info.DhcpEnabled},{IPv4Address.ConvertIPAddressListToString(info.DhcpServer, ";")},{info.DhcpLeaseObtained},{info.DhcpLeaseExpires},{info.IPv6ProtocolAvailable},{IPv4Address.ConvertIPAddressListToString(info.IPv6Address, ";")},{IPv4Address.ConvertIPAddressListToString(info.IPv6AddressLinkLocal, ";")},{IPv4Address.ConvertIPAddressListToString(info.IPv6Gateway, ";")},{info.DNSAutoconfigurationEnabled},{info.DNSSuffix},{IPv4Address.ConvertIPAddressListToString(info.DNSServer, ";")}"); - + $"{info.Id},{EscapeCsvValue(info.Name)},{EscapeCsvValue(info.Description)},{info.Type},{info.PhysicalAddress},{info.Status},{info.IsOperational},{info.Speed},{info.IPv4ProtocolAvailable},{EscapeCsvValue(IPv4Address.ConvertIPAddressWithSubnetmaskListToString(info.IPv4Address, ";"))},{EscapeCsvValue(IPv4Address.ConvertIPAddressListToString(info.IPv4Gateway, ";"))},{info.DhcpEnabled},{EscapeCsvValue(IPv4Address.ConvertIPAddressListToString(info.DhcpServer, ";"))},{info.DhcpLeaseObtained},{info.DhcpLeaseExpires},{info.IPv6ProtocolAvailable},{EscapeCsvValue(IPv4Address.ConvertIPAddressListToString(info.IPv6Address, ";"))},{EscapeCsvValue(IPv4Address.ConvertIPAddressListToString(info.IPv6AddressLinkLocal, ";"))},{EscapeCsvValue(IPv4Address.ConvertIPAddressListToString(info.IPv6Gateway, ";"))},{info.DNSAutoconfigurationEnabled},{EscapeCsvValue(info.DNSSuffix)},{EscapeCsvValue(IPv4Address.ConvertIPAddressListToString(info.DNSServer, ";"))}"); File.WriteAllText(filePath, stringBuilder.ToString()); } diff --git a/Source/NETworkManager.Models/Export/ExportManager.OUIInfo.cs b/Source/NETworkManager.Models/Export/ExportManager.OUIInfo.cs index 8611f8cf19..fe727a1baf 100644 --- a/Source/NETworkManager.Models/Export/ExportManager.OUIInfo.cs +++ b/Source/NETworkManager.Models/Export/ExportManager.OUIInfo.cs @@ -48,7 +48,7 @@ private static void CreateCsv(IEnumerable collection, string filePath) stringBuilder.AppendLine($"{nameof(OUIInfo.MACAddress)},{nameof(OUIInfo.Vendor)}"); foreach (var info in collection) - stringBuilder.AppendLine($"{info.MACAddress},\"{info.Vendor}\""); + stringBuilder.AppendLine($"{info.MACAddress},{EscapeCsvValue(info.Vendor)}"); File.WriteAllText(filePath, stringBuilder.ToString()); } diff --git a/Source/NETworkManager.Models/Export/ExportManager.PingInfo.cs b/Source/NETworkManager.Models/Export/ExportManager.PingInfo.cs index be2027702a..1b5fe6760b 100644 --- a/Source/NETworkManager.Models/Export/ExportManager.PingInfo.cs +++ b/Source/NETworkManager.Models/Export/ExportManager.PingInfo.cs @@ -51,7 +51,7 @@ private static void CreateCsv(IEnumerable collection, string filePath) foreach (var info in collection) stringBuilder.AppendLine( - $"{DateTimeHelper.DateTimeToFullDateTimeString(info.Timestamp)},{info.IPAddress},{info.Hostname},{info.Bytes},{Ping.TimeToString(info.Status, info.Time, true)},{info.TTL},{info.Status}"); + $"{DateTimeHelper.DateTimeToFullDateTimeString(info.Timestamp)},{info.IPAddress},{EscapeCsvValue(info.Hostname)},{info.Bytes},{Ping.TimeToString(info.Status, info.Time, true)},{info.TTL},{info.Status}"); File.WriteAllText(filePath, stringBuilder.ToString()); } diff --git a/Source/NETworkManager.Models/Export/ExportManager.PortLookupInfo.cs b/Source/NETworkManager.Models/Export/ExportManager.PortLookupInfo.cs index a11dfc3016..f08f85d2c0 100644 --- a/Source/NETworkManager.Models/Export/ExportManager.PortLookupInfo.cs +++ b/Source/NETworkManager.Models/Export/ExportManager.PortLookupInfo.cs @@ -49,7 +49,7 @@ private static void CreateCsv(IEnumerable collection, string fil $"{nameof(PortLookupInfo.Number)},{nameof(PortLookupInfo.Protocol)},{nameof(PortLookupInfo.Service)},{nameof(PortLookupInfo.Description)}"); foreach (var info in collection) - stringBuilder.AppendLine($"{info.Number},{info.Protocol},{info.Service},\"{info.Description}\""); + stringBuilder.AppendLine($"{info.Number},{info.Protocol},{EscapeCsvValue(info.Service)},{EscapeCsvValue(info.Description)}"); File.WriteAllText(filePath, stringBuilder.ToString()); } diff --git a/Source/NETworkManager.Models/Export/ExportManager.PortScannerInfo.cs b/Source/NETworkManager.Models/Export/ExportManager.PortScannerInfo.cs index c5c37b5232..13f428d2ba 100644 --- a/Source/NETworkManager.Models/Export/ExportManager.PortScannerInfo.cs +++ b/Source/NETworkManager.Models/Export/ExportManager.PortScannerInfo.cs @@ -52,7 +52,7 @@ private static void CreateCsv(IEnumerable collection, strin foreach (var info in collection) stringBuilder.AppendLine( - $"{info.IPAddress},{info.Hostname},{info.Port},{info.LookupInfo.Protocol},{info.LookupInfo.Service},\"{info.LookupInfo.Description}\",{info.State}"); + $"{info.IPAddress},{EscapeCsvValue(info.Hostname)},{info.Port},{info.LookupInfo.Protocol},{EscapeCsvValue(info.LookupInfo.Service)},{EscapeCsvValue(info.LookupInfo.Description)},{info.State}"); File.WriteAllText(filePath, stringBuilder.ToString()); } diff --git a/Source/NETworkManager.Models/Export/ExportManager.SNMPReceivedInfo.cs b/Source/NETworkManager.Models/Export/ExportManager.SNMPReceivedInfo.cs index 7e3aaa7704..7f502a3b96 100644 --- a/Source/NETworkManager.Models/Export/ExportManager.SNMPReceivedInfo.cs +++ b/Source/NETworkManager.Models/Export/ExportManager.SNMPReceivedInfo.cs @@ -49,7 +49,7 @@ private static void CreateCsv(IEnumerable collection, string filePath) stringBuilder.AppendLine($"{nameof(SNMPInfo.OID)},{nameof(SNMPInfo.Data)}"); foreach (var info in collection) - stringBuilder.AppendLine($"{info.OID},{info.Data}"); + stringBuilder.AppendLine($"{EscapeCsvValue(info.OID)},{EscapeCsvValue(info.Data)}"); File.WriteAllText(filePath, stringBuilder.ToString()); } diff --git a/Source/NETworkManager.Models/Export/ExportManager.SNTPLookupResultInfo.cs b/Source/NETworkManager.Models/Export/ExportManager.SNTPLookupResultInfo.cs index 92bd9b9407..abe008ba12 100644 --- a/Source/NETworkManager.Models/Export/ExportManager.SNTPLookupResultInfo.cs +++ b/Source/NETworkManager.Models/Export/ExportManager.SNTPLookupResultInfo.cs @@ -52,7 +52,7 @@ private static void CreateCsv(IEnumerable collection, string fil foreach (var info in collection) stringBuilder.AppendLine( - $"{info.Server},{info.IPEndPoint},{DateTimeHelper.DateTimeToFullDateTimeString(info.DateTime.NetworkTime)},{DateTimeHelper.DateTimeToFullDateTimeString(info.DateTime.LocalStartTime)},{DateTimeHelper.DateTimeToFullDateTimeString(info.DateTime.LocalEndTime)},{info.DateTime.Offset} s,{info.DateTime.RoundTripDelay} ms"); + $"{EscapeCsvValue(info.Server)},{info.IPEndPoint},{DateTimeHelper.DateTimeToFullDateTimeString(info.DateTime.NetworkTime)},{DateTimeHelper.DateTimeToFullDateTimeString(info.DateTime.LocalStartTime)},{DateTimeHelper.DateTimeToFullDateTimeString(info.DateTime.LocalEndTime)},{info.DateTime.Offset} s,{info.DateTime.RoundTripDelay} ms"); File.WriteAllText(filePath, stringBuilder.ToString()); } @@ -65,7 +65,7 @@ private static void CreateCsv(IEnumerable collection, string fil private static void CreateXml(IEnumerable collection, string filePath) { var document = new XDocument(DefaultXDeclaration, - new XElement(ApplicationName.SNMP.ToString(), + new XElement(ApplicationName.SNTPLookup.ToString(), new XElement(nameof(SNTPLookupInfo) + "s", from info in collection select diff --git a/Source/NETworkManager.Models/Export/ExportManager.TracerouteHopInfo.cs b/Source/NETworkManager.Models/Export/ExportManager.TracerouteHopInfo.cs index 6523b291e6..8face2f264 100644 --- a/Source/NETworkManager.Models/Export/ExportManager.TracerouteHopInfo.cs +++ b/Source/NETworkManager.Models/Export/ExportManager.TracerouteHopInfo.cs @@ -51,7 +51,7 @@ private static void CreateCsv(IEnumerable collection, string foreach (var info in collection) stringBuilder.AppendLine( - $"{info.Hop},{info.Status1},{Ping.TimeToString(info.Status1, info.Time1, true)},{info.Status2},{Ping.TimeToString(info.Status2, info.Time2, true)},{info.Status3},{Ping.TimeToString(info.Status3, info.Time3, true)},{info.IPAddress},{info.Hostname},{info.IPGeolocationResult?.Info?.Continent},{info.IPGeolocationResult?.Info?.Country},{info.IPGeolocationResult?.Info?.Region},{info.IPGeolocationResult?.Info?.City},{info.IPGeolocationResult?.Info?.District},{info.IPGeolocationResult?.Info?.Isp?.Replace(",", "")},{info.IPGeolocationResult?.Info?.Org?.Replace(",", "")},{info.IPGeolocationResult?.Info?.As?.Replace(",", "")},{info.IPGeolocationResult?.Info?.Asname?.Replace(",", "")},{info.IPGeolocationResult?.Info?.Hosting},{info.IPGeolocationResult?.Info?.Proxy},{info.IPGeolocationResult?.Info?.Mobile}"); + $"{info.Hop},{info.Status1},{Ping.TimeToString(info.Status1, info.Time1, true)},{info.Status2},{Ping.TimeToString(info.Status2, info.Time2, true)},{info.Status3},{Ping.TimeToString(info.Status3, info.Time3, true)},{info.IPAddress},{EscapeCsvValue(info.Hostname)},{EscapeCsvValue(info.IPGeolocationResult?.Info?.Continent)},{EscapeCsvValue(info.IPGeolocationResult?.Info?.Country)},{EscapeCsvValue(info.IPGeolocationResult?.Info?.Region)},{EscapeCsvValue(info.IPGeolocationResult?.Info?.City)},{EscapeCsvValue(info.IPGeolocationResult?.Info?.District)},{EscapeCsvValue(info.IPGeolocationResult?.Info?.Isp)},{EscapeCsvValue(info.IPGeolocationResult?.Info?.Org)},{EscapeCsvValue(info.IPGeolocationResult?.Info?.As)},{EscapeCsvValue(info.IPGeolocationResult?.Info?.Asname)},{info.IPGeolocationResult?.Info?.Hosting},{info.IPGeolocationResult?.Info?.Proxy},{info.IPGeolocationResult?.Info?.Mobile}"); File.WriteAllText(filePath, stringBuilder.ToString()); } diff --git a/Source/NETworkManager.Models/Export/ExportManager.WiFiNetworkInfo.cs b/Source/NETworkManager.Models/Export/ExportManager.WiFiNetworkInfo.cs index 2730dcaa2c..75ce5e871b 100644 --- a/Source/NETworkManager.Models/Export/ExportManager.WiFiNetworkInfo.cs +++ b/Source/NETworkManager.Models/Export/ExportManager.WiFiNetworkInfo.cs @@ -51,7 +51,7 @@ private static void CreateCsv(IEnumerable collection, string fi foreach (var info in collection) stringBuilder.AppendLine( - $"{info.AvailableNetwork.Bssid},{info.AvailableNetwork.Ssid},{info.AvailableNetwork.ChannelCenterFrequencyInKilohertz},{info.AvailableNetwork.SignalBars},{info.AvailableNetwork.IsWiFiDirect},{info.AvailableNetwork.NetworkRssiInDecibelMilliwatts},{info.AvailableNetwork.PhyKind},{info.AvailableNetwork.NetworkKind},{info.AvailableNetwork.SecuritySettings.NetworkAuthenticationType},{info.AvailableNetwork.SecuritySettings.NetworkEncryptionType},{info.AvailableNetwork.BeaconInterval},{info.AvailableNetwork.Uptime}"); + $"{EscapeCsvValue(info.AvailableNetwork.Bssid)},{EscapeCsvValue(info.AvailableNetwork.Ssid)},{info.AvailableNetwork.ChannelCenterFrequencyInKilohertz},{info.AvailableNetwork.SignalBars},{info.AvailableNetwork.IsWiFiDirect},{info.AvailableNetwork.NetworkRssiInDecibelMilliwatts},{info.AvailableNetwork.PhyKind},{info.AvailableNetwork.NetworkKind},{info.AvailableNetwork.SecuritySettings.NetworkAuthenticationType},{info.AvailableNetwork.SecuritySettings.NetworkEncryptionType},{info.AvailableNetwork.BeaconInterval},{info.AvailableNetwork.Uptime}"); File.WriteAllText(filePath, stringBuilder.ToString()); } @@ -64,11 +64,11 @@ private static void CreateCsv(IEnumerable collection, string fi private static void CreateXml(IEnumerable collection, string filePath) { var document = new XDocument(DefaultXDeclaration, - new XElement(ApplicationName.IPScanner.ToString(), - new XElement(nameof(IPScannerHostInfo) + "s", + new XElement(ApplicationName.WiFi.ToString(), + new XElement(nameof(WiFiNetworkInfo) + "s", from info in collection select - new XElement(nameof(IPScannerHostInfo), + new XElement(nameof(WiFiNetworkInfo), new XElement(nameof(WiFiNetworkInfo.AvailableNetwork.Bssid), info.AvailableNetwork.Bssid), new XElement(nameof(WiFiNetworkInfo.AvailableNetwork.Ssid), info.AvailableNetwork.Ssid), new XElement(nameof(WiFiNetworkInfo.AvailableNetwork.ChannelCenterFrequencyInKilohertz), diff --git a/Source/NETworkManager.Models/Export/ExportManager.cs b/Source/NETworkManager.Models/Export/ExportManager.cs index d502f50509..5adf32483b 100644 --- a/Source/NETworkManager.Models/Export/ExportManager.cs +++ b/Source/NETworkManager.Models/Export/ExportManager.cs @@ -49,4 +49,23 @@ public static string GetFileExtensionAsString(ExportFileType fileExtension) _ => string.Empty }; } + + /// + /// Escapes a string value for CSV format by wrapping it in quotes if it contains commas, quotes, or newlines. + /// + /// The string value to escape. + /// The escaped CSV value. + internal static string EscapeCsvValue(string value) + { + if (string.IsNullOrEmpty(value)) + return value; + + // If the value contains comma, quote, or newline, wrap it in quotes and escape internal quotes + if (value.Contains(',') || value.Contains('"') || value.Contains('\n') || value.Contains('\r')) + { + return $"\"{value.Replace("\"", "\"\"")}\""; + } + + return value; + } } \ No newline at end of file