캡티브 포털 감지, 팝업창 구현?

캡티브 포털 감지, 팝업창 구현?

나는 Hostapd를 기반으로 캡티브 포털을 구축하고 있습니다.

  • 내 Linux 컴퓨터는 Wi-Fi 액세스를 제공합니다.
  • iPad 및 Android 클라이언트 태블릿이 이 Wi-Fi에 연결됩니다.

일반적으로 모든 클라이언트 운영 체제는 URL에 액세스할 수 있는지 여부를 확인합니다. 그렇지 않은 경우 클라이언트 운영 체제는 해당 URL이 제어된다고 선언하고 팝업 브라우저 창을 표시합니다. 로그인, 프레젠테이션 등을 위한 팝업 창입니다.

내 컴퓨터의 서비스를 보여주기 위해 이와 같은 팝업을 표시하고 싶은데 이해가 되지 않습니다. 그러나 나는 그물을 피했습니다. 모든 연결은 컴퓨터의 localhost 웹사이트로 리디렉션됩니다.

왜 이런 팝업이 보이지 않나요? 얻는 방법? 내 로컬 호스트에서 이를 어떻게/어디에 구현해야 합니까?

비슷한 아이디어:

팝업이 발생하면 그 내용은 어떻게 정의되나요? 예를 들어, 레스토랑 종속 포털에서는 해당 페이지가 어디에 저장되어 있는지 메모에 비밀 번호를 제공하도록 요구합니다. 운영 체제는 팝업에 표시할 URL을 어떻게 알 수 있나요?

답변1

종속 포털을 표시하려면 모든 인터넷 트래픽을 중지하고 302 redirect이를 클라이언트 브라우저에 제공해야 합니다. 이렇게 하려면 iptables모든 트래픽을 웹 서버(예: 등)로 리디렉션하는 방화벽(예: 방화벽 )이 있어야 합니다. nginx웹 서버는 apache로그인 페이지의 URL로 응답합니다.302 redirect

나는 썼다내 블로그에 긴 글이 있어Raspberry Pi를 사용하여 이 작업을 수행하는 방법은 다음과 같습니다. 기본적으로 다음과 같이 요약됩니다.iptables 차단/웹 서버로 리디렉션:

iptables -t nat -A wlan0_Unknown -p tcp --dport 80 -j DNAT --to-destination 192.168.24.1

그런 다음 웹 서버( nginx)는 로그인 페이지로 리디렉션됩니다.

# For iOS
if ($http_user_agent ~* (CaptiveNetworkSupport) ) {
    return 302 http://hotspot.localnet/hotspot.html;
}

# For others
location / {
    return 302 http://hotspot.localnet/;
}

iOS는 더 어렵고 hotspot.html다음과 같이 WISP 설정이 필요합니다.

<!--
<?xml version="1.0" encoding="UTF-8"?>
<WISPAccessGatewayParam xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://www.wballiance.net/wispr_2_0.xsd">
<Redirect>
<MessageType>100</MessageType>
<ResponseCode>0</ResponseCode>
<VersionHigh>2.0</VersionHigh>
<VersionLow>1.0</VersionLow>
<AccessProcedure>1.0</AccessProcedure>
<AccessLocation>Andrew Wippler is awesome</AccessLocation>
<LocationName>MyOpenAP</LocationName>
<LoginURL>http://hotspot.localnet/</LoginURL>
</Redirect>
</WISPAccessGatewayParam>
-->

답변2

@AWippler 메시지를 보완하는 데 사용됩니다. FreeBSD에서 종속 포털을 구현하고 Windows, Mac, iOS 및 Android 장치를 클라이언트로 사용하여 몇 가지 테스트를 수행했습니다.

내 테스트에 따르면 최신 Android 버전크롬을 설치할 때, 종속 포털 감지 테스트에는 포트 80 대신 포트 443을 사용하십시오. 인증을 위해 포트 80만 차단하면 최신 Android 클라이언트가 작동하지 않는 이유가 궁금해 머리를 긁적일 것입니다.

(알겠습니다. 이 내용이 첫 페이지에 실린 것을 방금 확인했습니다. 답변은 2016년부터입니다... Android는 아마도 곧 이 작업을 시작했을 것입니다.)

포트 80을 차단하는 것 외에도 포트 443을 차단하고 SSL 인증서 오류를 허용하는 SSL 호스트를 설정해야 합니다. 또는 인터넷 전체에서 유효한 실제 DNS 도메인과 유효한 인증서를 사용하세요.

강제 인증 구현 방법을 함께 알아보려는 방문자는 내 Q&A를 참조하세요.Apache를 사용하는 종속 포털그리고 관련된 문제FON 인증 포털에서 WISPr 태그를 받으세요;테스트에도 유용함MacOS에서 CNA 비활성화

관련 정보