Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ private static void CreateCsv(IEnumerable<ConnectionInfo> 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());
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ private static void CreateCsv(IEnumerable<DNSLookupRecordInfo> 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());
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ private static void CreateCsv(IEnumerable<DiscoveryProtocolPackageInfo> 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());
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ private static void CreateCsv(IEnumerable<HostsFileEntry> 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());
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ private static void CreateCsv(IEnumerable<IPGeolocationInfo> 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());
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@ private static void CreateCsv(IEnumerable<IPNetworkInfo> collection, string file
private static void CreateXml(IEnumerable<IPNetworkInfo> 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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -89,25 +89,25 @@ private static void CreateCsv(IEnumerable<IPScannerHostInfo> 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)}"
);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -50,8 +50,7 @@ private static void CreateCsv(IEnumerable<NetworkInterfaceInfo> 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());
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ private static void CreateCsv(IEnumerable<OUIInfo> 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());
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ private static void CreateCsv(IEnumerable<PingInfo> 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());
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ private static void CreateCsv(IEnumerable<PortLookupInfo> 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());
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ private static void CreateCsv(IEnumerable<PortScannerPortInfo> 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());
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ private static void CreateCsv(IEnumerable<SNMPInfo> 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());
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ private static void CreateCsv(IEnumerable<SNTPLookupInfo> 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());
}
Expand All @@ -65,7 +65,7 @@ private static void CreateCsv(IEnumerable<SNTPLookupInfo> collection, string fil
private static void CreateXml(IEnumerable<SNTPLookupInfo> 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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ private static void CreateCsv(IEnumerable<TracerouteHopInfo> 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());
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ private static void CreateCsv(IEnumerable<WiFiNetworkInfo> 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());
}
Expand All @@ -64,11 +64,11 @@ private static void CreateCsv(IEnumerable<WiFiNetworkInfo> collection, string fi
private static void CreateXml(IEnumerable<WiFiNetworkInfo> 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),
Expand Down
19 changes: 19 additions & 0 deletions Source/NETworkManager.Models/Export/ExportManager.cs
Original file line number Diff line number Diff line change
Expand Up @@ -49,4 +49,23 @@ public static string GetFileExtensionAsString(ExportFileType fileExtension)
_ => string.Empty
};
}

/// <summary>
/// Escapes a string value for CSV format by wrapping it in quotes if it contains commas, quotes, or newlines.
/// </summary>
/// <param name="value">The string value to escape.</param>
/// <returns>The escaped CSV value.</returns>
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;
}
}