Skip to content

Commit ff8b4d5

Browse files
committed
impl auto IP selection (#86)
1 parent f67aaf0 commit ff8b4d5

9 files changed

+267
-139
lines changed

MainForm.cs

+36-11
Original file line numberDiff line numberDiff line change
@@ -414,7 +414,7 @@ private void HostInputBox_KeyUp(object sender, KeyEventArgs e)
414414

415415
private void TracerouteGridView_SelectedRowsChanged(object sender, EventArgs e)
416416
{
417-
FocusMapPoint(tracerouteGridView.SelectedRow + 1);
417+
FocusMapPoint(tracerouteGridView.SelectedRow);
418418
}
419419

420420
private void StartTracerouteButton_Click(object sender, EventArgs e)
@@ -511,22 +511,47 @@ private void StartTracerouteButton_Click(object sender, EventArgs e)
511511
IPAddress[] resolvedAddresses = ResolveHost(HostInputBox.Text);
512512
if (resolvedAddresses.Length > 1)
513513
{
514-
ResolvedIPSelection.Items.Clear();
515-
ResolvedIPSelection.Items.Add(Resources.SELECT_IP_DROPDOWN);
516-
foreach (IPAddress resolvedAddress in resolvedAddresses)
514+
if (UserSettings.autoIPSelection == "manual")
517515
{
518-
ResolvedIPSelection.Items.Add(resolvedAddress.ToString());
516+
// 手动选择 IP
517+
ResolvedIPSelection.Items.Clear();
518+
ResolvedIPSelection.Items.Add(Resources.SELECT_IP_DROPDOWN);
519+
foreach (IPAddress resolvedAddress in resolvedAddresses)
520+
{
521+
ResolvedIPSelection.Items.Add(resolvedAddress.ToString());
522+
}
523+
ResolvedIPSelection.SelectedIndex = 0;
524+
ResolvedIPSelection.Visible = true;
525+
CurrentInstance = null;
526+
return;
527+
}
528+
else
529+
{
530+
IPAddress selectedIP = null;
531+
532+
if (UserSettings.autoIPSelection == "first_ipv4")
533+
{
534+
selectedIP = resolvedAddresses.FirstOrDefault(ip => ip.AddressFamily == AddressFamily.InterNetwork);
535+
}
536+
else if (UserSettings.autoIPSelection == "first_ipv6")
537+
{
538+
selectedIP = resolvedAddresses.FirstOrDefault(ip => ip.AddressFamily == AddressFamily.InterNetworkV6);
539+
}
540+
541+
// 回退到第一个可用的 IP
542+
if (selectedIP == null)
543+
{
544+
selectedIP = resolvedAddresses[0];
545+
}
546+
547+
readyToUseIP = selectedIP.ToString();
519548
}
520-
ResolvedIPSelection.SelectedIndex = 0;
521-
ResolvedIPSelection.Visible = true;
522-
CurrentInstance = null;
523-
return;
524549
}
525550
else
526551
{
527552
readyToUseIP = resolvedAddresses[0].ToString();
528-
Title = Resources.APPTITLE + ": " + HostInputBox.Text + " (" + readyToUseIP + ")";
529553
}
554+
Title = Resources.APPTITLE + ": " + HostInputBox.Text + " (" + readyToUseIP + ")";
530555
}
531556
catch (System.Net.Sockets.SocketException)
532557
{
@@ -712,7 +737,7 @@ private void Instance_OutputCollectionChanged(object sender, System.Collections.
712737
// 仅当存在经纬度数据时更新地图
713738
if (result.Latitude != "" && result.Longitude != "")
714739
{
715-
UpdateMap(result, HopNo);
740+
UpdateMap(result, HopNo - 1);
716741
}
717742

718743
tracerouteGridView.ReloadData(HopNo - 1);

OpenTrace.csproj

+1-1
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
<Title>OpenTrace</Title>
1515
<ApplicationIcon>icon.ico</ApplicationIcon>
1616
<PackageIcon>icon.png</PackageIcon>
17-
<Version>1.4.3.3</Version>
17+
<Version>1.4.4.0</Version>
1818
<Platforms>AnyCPU;x64</Platforms>
1919
<PlatformTarget>AnyCPU</PlatformTarget>
2020

PreferencesDialog.xeto

+8
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,14 @@
6868
</TableRow>
6969
</TableLayout>
7070
</TableRow>
71+
<TableRow>
72+
<Label Text="{x:Static resource:Resources.AUTO_IP_SELECTION}"></Label>
73+
<DropDown x:Name="autoIPSelection" SelectedIndex="0">
74+
<ListItem Text="{x:Static resource:Resources.IP_SELECTION_MANUAL}" Key="manual"></ListItem>
75+
<ListItem Text="{x:Static resource:Resources.IP_SELECTION_FIRST_IPV4}" Key="first_ipv4"></ListItem>
76+
<ListItem Text="{x:Static resource:Resources.IP_SELECTION_FIRST_IPV6}" Key="first_ipv6"></ListItem>
77+
</DropDown>
78+
</TableRow>
7179
</TableLayout>
7280
</TableRow>
7381
<TableRow>

Properties/Resources.Designer.cs

+43-11
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Properties/Resources.resx

+12
Original file line numberDiff line numberDiff line change
@@ -519,4 +519,16 @@ And restart OpenTrace after execution.</value>
519519
<data name="PRIVACY_MASKING_IP_HALF" xml:space="preserve">
520520
<value>hops by partially masking IP</value>
521521
</data>
522+
<data name="AUTO_IP_SELECTION" xml:space="preserve">
523+
<value>Auto IP Selection</value>
524+
</data>
525+
<data name="IP_SELECTION_MANUAL" xml:space="preserve">
526+
<value>Manual</value>
527+
</data>
528+
<data name="IP_SELECTION_FIRST_IPV4" xml:space="preserve">
529+
<value>Auto-select First IPv4 (if available)</value>
530+
</data>
531+
<data name="IP_SELECTION_FIRST_IPV6" xml:space="preserve">
532+
<value>Auto-select First IPv6 (if available)</value>
533+
</data>
522534
</root>

Properties/Resources.zh-CN.resx

+16
Original file line numberDiff line numberDiff line change
@@ -139,6 +139,10 @@
139139
<data name="AVRG" xml:space="preserve">
140140
<value>平均延迟</value>
141141
</data>
142+
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
143+
<data name="baiduMap" type="System.Resources.ResXNullRef, System.Windows.Forms">
144+
<value />
145+
</data>
142146
<data name="BEST" xml:space="preserve">
143147
<value>最佳延迟</value>
144148
</data>
@@ -514,4 +518,16 @@ sudo xattr -r -d com.apple.quarantine &lt;将 OpenTrace 拖放至此&gt;
514518
<data name="PRIVACY_MASKING_IP_HALF" xml:space="preserve">
515519
<value>跳的部分 IP</value>
516520
</data>
521+
<data name="AUTO_IP_SELECTION" xml:space="preserve">
522+
<value>自动选择 IP</value>
523+
</data>
524+
<data name="IP_SELECTION_MANUAL" xml:space="preserve">
525+
<value>手动选择</value>
526+
</data>
527+
<data name="IP_SELECTION_FIRST_IPV4" xml:space="preserve">
528+
<value>自动选择首个 IPv4 (如果可用)</value>
529+
</data>
530+
<data name="IP_SELECTION_FIRST_IPV6" xml:space="preserve">
531+
<value>自动选择首个 IPv6 (如果可用)</value>
532+
</data>
517533
</root>

0 commit comments

Comments
 (0)