我输入了如下文字数据:
AX AMDBCEFG 103.12.96.0 103.12.98.255
AX AMDBDEFG 103.11.64.0 103.13.64.255
AX AMDBEEFG 103.14.24.0 103.14.24.255
我正在寻找的输出是一个新的文本文件:
AX AMDBCEFG 103.12.96.0 103.12.96.255
AX AMDBCEFG 103.12.97.0 103.12.97.255
AX AMDBCEFG 103.12.98.0 103.12.98.255
AX AMDBDEFG 103.11.64.0 103.11.64.255
AX AMDBDEFG 103.12.64.0 103.12.64.255
AX AMDBDEFG 103.13.64.0 103.13.64.255
AX AMDBEEFG 103.14.24.0 103.14.24.255
来自输入的 First line
仅增加3rd Octet
96 to 98
来自输入的Second line
仅增加2nd Octet
11 to 13
来自输入Third line
的{{1}}。
到目前为止我尝试了什么:
我已将IP视为字符串,然后在remains same
的基础上进行拆分,这是非常繁琐的事情。
.
在继续讨论之前,我发现我可以使用System.Net.IPAddress。
string sFile = "D:\\input.txt";
string sNewFilePath = Path.Combine(@"D:\\Output", Path.GetFileName(sFile));
string[] arrLines = File.ReadAllLines(sFile);
using (StreamWriter writer = new StreamWriter(sNewFilePath))
{
foreach (string sLine in arrLines)
{
string[] arrTab = sLine.Split('\t');
string sIP1 = arrTab[2].Trim();
string sIP2 = arrTab[3].Trim();
string[] arrIP1 = sIP1.Split('.');
string[] arrIP2 = sIP2.Split('.');
int iOct1_IP1 = Convert.ToInt32(arrIP1[1]);
int iOct1_IP2 = Convert.ToInt32(arrIP2[1]);
int iOct2_IP1 = Convert.ToInt32(arrIP1[2]);
int iOct2_IP2 = Convert.ToInt32(arrIP2[2]);
int iOct1_Diff = iOct1_IP2 - iOct1_IP1;
int iOct2_Diff = iOct2_IP2 - iOct2_IP1;
if (iOct1_Diff > 0)
{
//loop & increment
//write lines to file
}
else if (iOct2_Diff > 0)
{
//loop & increment
//write lines to file
}
}
}
我的问题是,是否有任何首选方式使用上述类或任何其他技术来实现这一目标?
很抱歉因为对增量IP地址使用的术语缺乏了解。
谢谢。
答案 0 :(得分:1)
最好的方法是使用已经存在的BCL解析/格式方法,比如IPAddress类的Parse方法。
您可以在使用方法IPAddress.GetAddressBytes后获取地址的单个部分
然后,您可以递增地址的单个部分,并创建新地址
有关工作示例,请参阅演示:https://dotnetfiddle.net/cjwlXk
这也适用于具有不同第二和第三部分的范围,如192.168.1.0 - > 192.169.14.0
foreach (var item in items)
{
var fromIp = item.From.GetAddressBytes();
var toIp = item.To.GetAddressBytes();
Console.WriteLine("From {0} to {1}", item.From.ToString(), item.To.ToString());
foreach (byte secondPart in Enumerable.Range(fromIp[1], toIp[1] - fromIp[1] + 1))
{
foreach (byte thirdPart in Enumerable.Range(fromIp[2], toIp[2] - fromIp[2] + 1))
{
var ip = new IPAddress(new byte[] {fromIp[0], secondPart, thirdPart, fromIp[3]});
yield return string.Format("{0}\t{1}\t{2}\t{2}", item.C1, item.C2, ip.ToString());
}
}
}