Some updates

This commit is contained in:
Namhyeon Go 2025-04-05 15:16:15 +09:00
parent d8fa8779de
commit dd85e98c9a
8 changed files with 130 additions and 20 deletions

View File

@ -3,9 +3,23 @@ using System.Threading.Tasks;
namespace WelsonJS.Launcher
{
/// <summary>
/// Defines a contract for resource tools that can handle specific HTTP requests.
/// </summary>
public interface IResourceTool
{
/// <summary>
/// Determines whether this tool can handle the specified path.
/// </summary>
/// <param name="path">The request path to check.</param>
/// <returns>True if this tool can handle the request; otherwise, false.</returns>
bool CanHandle(string path);
/// <summary>
/// Asynchronously processes the HTTP request for the specified path.
/// </summary>
/// <param name="context">The HTTP listener context containing request and response objects.</param>
/// <param name="path">The request path to handle.</param>
/// <returns>A task representing the asynchronous operation.</returns>
Task HandleAsync(HttpListenerContext context, string path);
}
}
}

View File

@ -60,6 +60,24 @@ namespace WelsonJS.Launcher.Properties {
}
}
/// <summary>
/// 과(와) 유사한 지역화된 문자열을 찾습니다.
/// </summary>
internal static string AzureAiServiceApiKey {
get {
return ResourceManager.GetString("AzureAiServiceApiKey", resourceCulture);
}
}
/// <summary>
/// https://ai-catswords656881030318.services.ai.azure.com/models/chat/completions?api-version=2024-05-01-preview과(와) 유사한 지역화된 문자열을 찾습니다.
/// </summary>
internal static string AzureAiServiceUrl {
get {
return ResourceManager.GetString("AzureAiServiceUrl", resourceCulture);
}
}
/// <summary>
/// https://copilot.microsoft.com/과(와) 유사한 지역화된 문자열을 찾습니다.
/// </summary>
@ -78,6 +96,15 @@ namespace WelsonJS.Launcher.Properties {
}
}
/// <summary>
/// 1.1.1.1과(와) 유사한 지역화된 문자열을 찾습니다.
/// </summary>
internal static string DnsServerAddress {
get {
return ResourceManager.GetString("DnsServerAddress", resourceCulture);
}
}
/// <summary>
/// (아이콘)과(와) 유사한 System.Drawing.Icon 형식의 지역화된 리소스를 찾습니다.
/// </summary>
@ -195,5 +222,41 @@ namespace WelsonJS.Launcher.Properties {
return ResourceManager.GetString("ResourceServerPrefix", resourceCulture);
}
}
/// <summary>
/// 141.101.82.1과(와) 유사한 지역화된 문자열을 찾습니다.
/// </summary>
internal static string WhoisClientAddress {
get {
return ResourceManager.GetString("WhoisClientAddress", resourceCulture);
}
}
/// <summary>
/// https://xn--c79as89aj0e29b77z.xn--3e0b707e/kor/whois/whois.jsp과(와) 유사한 지역화된 문자열을 찾습니다.
/// </summary>
internal static string WhoisReferrerUrl {
get {
return ResourceManager.GetString("WhoisReferrerUrl", resourceCulture);
}
}
/// <summary>
/// https://xn--c79as89aj0e29b77z.xn--3e0b707e/kor/whois.jsc과(와) 유사한 지역화된 문자열을 찾습니다.
/// </summary>
internal static string WhoisServerUrl {
get {
return ResourceManager.GetString("WhoisServerUrl", resourceCulture);
}
}
/// <summary>
/// Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36 Edg/134.0.3124.77과(와) 유사한 지역화된 문자열을 찾습니다.
/// </summary>
internal static string WhoisUserAgent {
get {
return ResourceManager.GetString("WhoisUserAgent", resourceCulture);
}
}
}
}

View File

@ -160,4 +160,25 @@
<data name="DevToolsPrefix" xml:space="preserve">
<value>http://localhost:9222/</value>
</data>
<data name="AzureAiServiceApiKey" xml:space="preserve">
<value />
</data>
<data name="AzureAiServiceUrl" xml:space="preserve">
<value>https://ai-catswords656881030318.services.ai.azure.com/models/chat/completions?api-version=2024-05-01-preview</value>
</data>
<data name="DnsServerAddress" xml:space="preserve">
<value>1.1.1.1</value>
</data>
<data name="WhoisClientAddress" xml:space="preserve">
<value>141.101.82.1</value>
</data>
<data name="WhoisReferrerUrl" xml:space="preserve">
<value>https://xn--c79as89aj0e29b77z.xn--3e0b707e/kor/whois/whois.jsp</value>
</data>
<data name="WhoisServerUrl" xml:space="preserve">
<value>https://xn--c79as89aj0e29b77z.xn--3e0b707e/kor/whois.jsc</value>
</data>
<data name="WhoisUserAgent" xml:space="preserve">
<value>Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36 Edg/134.0.3124.77</value>
</data>
</root>

View File

@ -34,6 +34,7 @@ namespace WelsonJS.Launcher
_resourceTools.Add(new ResourceTools.Completion(this));
_resourceTools.Add(new ResourceTools.Config(this));
_resourceTools.Add(new ResourceTools.DevTools(this));
_resourceTools.Add(new ResourceTools.DnsQuery(this));
_resourceTools.Add(new ResourceTools.Tfa(this));
_resourceTools.Add(new ResourceTools.Whois(this));
}

View File

@ -9,8 +9,10 @@ namespace WelsonJS.Launcher.ResourceTools
{
private ResourceServer Server;
private const string Prefix = "devtools/";
private const double Timeout = 5000;
public DevTools(ResourceServer server) {
public DevTools(ResourceServer server)
{
Server = server;
}
@ -27,6 +29,8 @@ namespace WelsonJS.Launcher.ResourceTools
{
using (HttpClient client = new HttpClient())
{
client.Timeout = TimeSpan.FromMilliseconds(Timeout);
string url = Program.GetAppConfig("DevToolsPrefix") + endpoint;
string data = await client.GetStringAsync(url);

View File

@ -8,7 +8,7 @@ using System.Threading.Tasks;
namespace WelsonJS.Launcher.ResourceTools
{
public class DnsQuery
public class DnsQuery : IResourceTool
{
private ResourceServer Server;
private const string Prefix = "dns-query/";
@ -17,10 +17,10 @@ namespace WelsonJS.Launcher.ResourceTools
private const int Timeout = 5000;
private static readonly Random _random = new Random();
public DnsQuery(ResourceServer server, string dnsServer = "8.8.8.8")
public DnsQuery(ResourceServer server)
{
Server = server;
DnsServer = dnsServer;
DnsServer = Program.GetAppConfig("DnsServerAddress");
}
public bool CanHandle(string path)
@ -115,17 +115,18 @@ namespace WelsonJS.Launcher.ResourceTools
try
{
UdpClient udpClient = new UdpClient(DnsServer, DnsPort);
udpClient.Client.ReceiveTimeout = Timeout;
using (UdpClient udpClient = new UdpClient(DnsServer, DnsPort))
{
udpClient.Client.ReceiveTimeout = Timeout;
byte[] request = CreateDnsQuery(domain, type);
udpClient.Send(request, request.Length);
byte[] request = CreateDnsQuery(domain, type);
udpClient.Send(request, request.Length);
IPEndPoint remoteEP = new IPEndPoint(IPAddress.Any, DnsPort);
byte[] response = udpClient.Receive(ref remoteEP);
IPEndPoint remoteEP = new IPEndPoint(IPAddress.Any, DnsPort);
byte[] response = udpClient.Receive(ref remoteEP);
records.AddRange(ParseDnsResponse(response, type));
udpClient.Close();
records.AddRange(ParseDnsResponse(response, type));
}
}
catch (Exception ex)
{

View File

@ -10,6 +10,7 @@ namespace WelsonJS.Launcher.ResourceTools
{
private ResourceServer Server;
private const string Prefix = "whois/";
private const int Timeout = 5000;
public Whois(ResourceServer server)
{
@ -31,20 +32,20 @@ namespace WelsonJS.Launcher.ResourceTools
return;
}
string whoisServerUrl = "https://xn--c79as89aj0e29b77z.xn--3e0b707e";
using (var client = new HttpClient())
{
client.Timeout = TimeSpan.FromSeconds(10);
client.Timeout = TimeSpan.FromMilliseconds(Timeout);
HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, $"{whoisServerUrl}/kor/whois.jsc")
string clientAddress = Program.GetAppConfig("WhoisClientAddress");
HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, Program.GetAppConfig("WhoisServerUrl"))
{
Content = new StringContent($"query={Uri.EscapeDataString(query)}&ip=141.101.82.1", Encoding.UTF8, "application/x-www-form-urlencoded")
Content = new StringContent($"query={Uri.EscapeDataString(query)}&ip={clientAddress}", Encoding.UTF8, "application/x-www-form-urlencoded")
};
request.Headers.Add("Accept", "*/*");
request.Headers.Add("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36 Edg/134.0.3124.77");
client.DefaultRequestHeaders.Referrer = new Uri($"{whoisServerUrl}/kor/whois/whois.jsp");
request.Headers.Add("User-Agent", Program.GetAppConfig("WhoisUserAgent"));
client.DefaultRequestHeaders.Referrer = new Uri(Program.GetAppConfig("WhoisReferrerUrl"));
try
{

View File

@ -7,6 +7,11 @@
<add key="DevToolsPrefix" value="http://localhost:9222/"/>
<add key="AzureAiServiceUrl" value="https://ai-catswords656881030318.services.ai.azure.com/models/chat/completions?api-version=2024-05-01-preview"/>
<add key="AzureAiServiceApiKey" value=""/>
<add key="WhoisServerUrl" value="https://xn--c79as89aj0e29b77z.xn--3e0b707e/kor/whois.jsc"/>
<add key="WhoisReferrerUrl" value="https://xn--c79as89aj0e29b77z.xn--3e0b707e/kor/whois/whois.jsp"/>
<add key="WhoisUserAgent" value="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36 Edg/134.0.3124.77"/>
<add key="WhoisClientAddress" value="141.101.82.1"/>
<add key="DnsServerAddress" value="1.1.1.1"/>
</appSettings>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2"/>