IP 주소를 가져오는 방법?
나는 내 사이트에 등록하는 사람이 누구든 IP 주소를 얻고 싶습니다.ASPNET에서 이 작업을 수행하는 방법.다음 코드를 사용했지만 올바른 IP 주소를 얻지 못하고 있습니다.
string ipaddress = Request.UserHostAddress;
이 방법을 사용하여 클라이언트 시스템의 IP 주소를 가져올 수 있습니다.
public static String GetIP()
{
String ip =
HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
if (string.IsNullOrEmpty(ip))
{
ip = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];
}
return ip;
}
보안을 위해 IP 주소를 사용하는 경우에는 인프라를 알고 있어야 합니다.
웹 서버와 헤더를 설정하는 클라이언트 간에 프록시를 사용하는 경우, 마지막 주소를 신뢰할 수 있어야 합니다.그런 다음 업데이트와 함께 Muhammed가 제안한 코드를 사용하여 항상 전달 헤더에서 마지막 IP 주소를 가져옵니다(아래 코드 참조).
프록시를 사용하지 않는 경우 X-Forwarded-For 헤더는 스푸핑하기 매우 쉽다는 점에 주의하십시오.당신이 그렇게 하지 않을 명확한 이유가 없는 한 무시하는 것이 좋습니다.
당신이 선택할 수 있도록 Muhammed Akhtar의 코드를 다음과 같이 업데이트했습니다.
public string GetIP(bool CheckForward = false)
{
string ip = null;
if (CheckForward) {
ip = HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
}
if (string.IsNullOrEmpty(ip)) {
ip = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];
} else { // Using X-Forwarded-For last address
ip = ip.Split(',')
.Last()
.Trim();
}
return ip;
}
이 위키백과 기사는 위험에 대해 더 철저히 설명합니다.
HTTP_X_FORWARDED_FORWARDED_FOR를 사용해야 하지만 쉼표로 구분된 여러 IP 주소를 반환할 수 있습니다.이 페이지를 참조하십시오.
그래서 당신은 항상 그것을 확인해야 합니다.저는 개인적으로 스플릿 기능을 사용합니다.
public static String GetIPAddress()
{
String ip =
HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
if (string.IsNullOrEmpty(ip))
ip = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];
else
ip = ip.Split(',')[0];
return ip;
}
MVC 6에서는 다음과 같은 방법으로 IP 주소를 검색합니다.
HttpContext.Request.HttpContext.Connection.RemoteIpAddress.ToString()
클라이언트가 투명하고 익명이 아닌 프록시를 통해 연결하는 경우 다음 주소에서 해당 주소를 가져올 수 있습니다.
Request.ServerVariables["HTTP_X_FORWARDED_FOR"]
null을 반환하거나 IP를 가져올 수 없는 경우 "unknown"을 반환할 수 있습니다.
Request.ServerVariables["REMOTE_ADDR"]
와 같아야 합니다.Request.UserHostAddress
둘 중 하나를 사용할 수 있습니다. 요청이 비클러스터된 프록시에서 전송되지 않은 경우.
그러나 익명 프록시에서 요청이 오면 클라이언트의 IP를 직접 가져올 수 없습니다.그래서 그들은 그 대리인들을 익명이라고 부릅니다.
string result = string.Empty;
string ip = HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
if (!string.IsNullOrEmpty(ip))
{
string[] ipRange = ip.Split(',');
int le = ipRange.Length - 1;
result = ipRange[0];
}
else
{
result = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];
}
언급URL : https://stackoverflow.com/questions/1907195/how-to-get-ip-address
'programing' 카테고리의 다른 글
검은색 포맷터 - 특정 다중 라인 코드 무시 (0) | 2023.06.25 |
---|---|
.NET 응용 프로그램의 불규칙한 잘못된 보기 상태 문제 (0) | 2023.06.25 |
다른 디렉토리에서 git clone (0) | 2023.06.25 |
그룹화된 스타일로 UITableView에서 셀 너비를 설정하는 방법 (0) | 2023.06.25 |
여러 Git 저장소 결합 (0) | 2023.06.25 |