diff --git a/unimarc/unimarc/Login.cs b/unimarc/unimarc/Login.cs index 922447e..dfc2f54 100644 --- a/unimarc/unimarc/Login.cs +++ b/unimarc/unimarc/Login.cs @@ -25,7 +25,7 @@ namespace WindowsFormsApp1 private void login_Load(object sender, EventArgs e) { - lbl_IP.Text = String.Format("{0}", ip.GetIP); + lbl_IP.Text = String.Format("{0}", ip.GetIP()); lbl_Version.Text = string.Format("Ver.{0}", ip.VersionInfo()); this.ActiveControl = ID_text; diff --git a/unimarc/unimarc/Skill.cs b/unimarc/unimarc/Skill.cs index 1b619ca..a1f34c5 100644 --- a/unimarc/unimarc/Skill.cs +++ b/unimarc/unimarc/Skill.cs @@ -3005,21 +3005,49 @@ namespace WindowsFormsApp1 public class IP { - /// - /// 현 PC의 외부아이피를 가져옴 - /// 프로그램에서 가져올 방법이 딱히 없어 꼼수로 웹사이트 크롤링을 통해 가져옴 - /// - public string GetIP + + public string GetIP() { - get - { - string externalIp = new WebClient().DownloadString("http://ipinfo.io/ip").Trim(); // http://icanhazip.com + // 최신 사이트 접속을 위한 TLS 1.2 활성화 (강제 지정) + // Windows 7 / .NET 4.0에서는 이 설정이 없으면 HTTPS 접속이 실패할 수 있습니다. + try { ServicePointManager.SecurityProtocol = (SecurityProtocolType)3072; } catch { } - if (string.IsNullOrWhiteSpace(externalIp)) - externalIp = GetIP; - return externalIp; + string[] urls = { + "http://checkip.amazonaws.com", + "http://ipinfo.io/ip", + "https://api.ipify.org" + }; + + foreach (var url in urls) + { + try + { + HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); + request.Timeout = 2000; + // 브라우저처럼 보이게 하기 위해 User-Agent 추가 (많은 사이트가 이를 요구함) + request.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36"; + + using (HttpWebResponse response = (HttpWebResponse)request.GetResponse()) + using (Stream stream = response.GetResponseStream()) + using (StreamReader reader = new StreamReader(stream)) + { + string ip = reader.ReadToEnd().Trim(); + // IP 형식인지 검증 + IPAddress address; + if (IPAddress.TryParse(ip, out address)) + { + // IPv4인 경우에만 반환 (필요시 IPv6 허용 가능) + if (address.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork) + return ip; + } + } + } + catch { continue; } // 다음 URL 시도 } + return "IP 확인 실패"; } + + public string VersionInfo() { string version = "0"; diff --git a/unimarc/unimarc/마스터/User_manage.cs b/unimarc/unimarc/마스터/User_manage.cs index b765885..c7c201a 100644 --- a/unimarc/unimarc/마스터/User_manage.cs +++ b/unimarc/unimarc/마스터/User_manage.cs @@ -28,7 +28,7 @@ namespace WindowsFormsApp1 button1.ForeColor = Color.Red; IP ip = new IP(); - string[] IPList = { "ALL", ip.GetIP }; + string[] IPList = { "ALL", ip.GetIP() }; cb_IPList.Items.AddRange(IPList); cb_IPList.SelectedIndex = 0; } diff --git a/unimarc/unimarc/마크/Marc.cs b/unimarc/unimarc/마크/Marc.cs index be863d8..da0bd90 100644 --- a/unimarc/unimarc/마크/Marc.cs +++ b/unimarc/unimarc/마크/Marc.cs @@ -2211,7 +2211,7 @@ namespace ExcelTest /// /// 문자와 문자사이의 값 가져오기 /// - /// 대상 문자열 + /// 대상 문자열Text100 /// 시작 문자열 /// 마지막 문자열 /// 불러올 태그 번호 diff --git a/unimarc/unimarc/마크/MarcEditorControl.cs b/unimarc/unimarc/마크/MarcEditorControl.cs index 93bcffc..a14b680 100644 --- a/unimarc/unimarc/마크/MarcEditorControl.cs +++ b/unimarc/unimarc/마크/MarcEditorControl.cs @@ -60,7 +60,7 @@ namespace ExcelTest { btNext.Enabled = enable; btNext.ForeColor = enable ? Color.Black : Color.DimGray; - } + } public MarcEditorControl() { @@ -295,7 +295,7 @@ namespace ExcelTest mp.richTextBox1.Text = richTextBox1.Text; mp.ButtonSave += (s, ev) => { - SetMarcString(ev); + SetMarcString(ev); btn_Reflesh008_Click(this, null); }; mp.Show(); @@ -304,7 +304,7 @@ namespace ExcelTest { public string SaveDate { get; set; } public string DBMarc { get; set; } - + public MacEditorParameter griddata { get; set; } } @@ -312,7 +312,7 @@ namespace ExcelTest private void Btn_Save_Click(object sender, EventArgs e) { - if (Param.NewMake ==false && string.IsNullOrEmpty(Param.ISBN13)) + if (Param.NewMake == false && string.IsNullOrEmpty(Param.ISBN13)) { MessageBox.Show("마크가 선택되지않았습니다."); return; @@ -1255,9 +1255,9 @@ namespace ExcelTest if (TagNum == "586") InputOneTextBox(text586a, GetMiddelString(Marc, "▼a", "▼")); if (TagNum == "650") InputOneTextBox(text650a, GetMiddelString(Marc, "▼a", "▼")); if (TagNum == "653") InputOneTextBox(text653a, GetMiddelString(Marc, "▼a", "▼")); - if (TagNum == "700") InputOneTextBox(text700a, GetMiddelString(Marc, "▼a", "▼")); + if (TagNum == "700") InputOneTextBox(text700a, GetMiddelString(Marc, "▼a", "▼", TagNum)); if (TagNum == "710") Text710And910(Marc, TagNum); - if (TagNum == "900") InputOneTextBox(text900a, GetMiddelString(Marc, "▼a", "▼")); + if (TagNum == "900") InputOneTextBox(text900a, GetMiddelString(Marc, "▼a", "▼", TagNum)); if (TagNum == "910") Text710And910(Marc, TagNum); if (TagNum == "940") InputOneTextBox(text940a, GetMiddelString(Marc, "▼a", "▼")); } @@ -1505,7 +1505,7 @@ namespace ExcelTest if (TagNum == "111") rbtn[2].Checked = true; - string a = GetMiddelString(SplitTag, "▼a", "▼"); + string a = GetMiddelString(SplitTag, "▼a", "▼", TagNum); InputOneTextBox(Text, a); } @@ -1801,9 +1801,15 @@ namespace ExcelTest if (TagNum == "710" || TagNum == "910") return str; - if (TagNum == "245") gu = new char[] { '.', ':', ';', '/', ' ' }; if (TagNum == "245a") gu = new char[] { '.', ',', '=', ':', ';', '/', ' ' }; + + //. 은 제외한다 260124 + if (TagNum.StartsWith("100") || TagNum.StartsWith("700") || TagNum.StartsWith("900")) + { + gu = new char[] { ',', ':', ';', '/', ' ' }; + } + for (int i = 0; i < gu.Length; i++) { str = str.TrimEnd(gu[i]);