
브라우저 기반 네트워크 스캐너 & 로컬 IP 탐지
webscan은 브라우저 기반 네트워크 IP 스캐너이자 로컬 IP 탐지기입니다. WebRTC를 통해 RTP 데이터 채널에서 수신 대기하고 활성 IP로 포트에 다시 루프백하여 사용자/피해자에게 바인딩된 IP를 탐지하며, 유효한 서브넷의 모든 활성 IP 주소를 fetch() 호출 또는 유효한 서브넷/IP를 가리키는 숨겨진 img 태그로부터의 즉각적인 시간 초과(반환된 TCP RST 패킷)를 모니터링하여 발견합니다. 모바일 및 데스크톱에서 모든 주요 브라우저와 OS에서 작동합니다. 베타 버전은 여러 기술을 추가할 수 있도록 확장 가능합니다.
webscan은 응답하지 않는 img 태그 소켓을 닫아 브라우저 및 네트워크 기반 속도 제한을 방지할 수 있는데, src 속성을 비소켓 URI로 변경하거나(흥미롭게도 DOM에서 제거해도 소켓이 닫히지 않음) AbortController() 인터페이스의 fetch() 신호 지원을 사용하여 이를 수행합니다.
@SamyKamkar 제작
2020/11/07 공개
더 재미있는 프로젝트: samy.pl
webscan 작동 방식
// wait for scan to finish
let scanResults = await webScanAll()
// or get callbacks when ips are found with a promise
let ipsToScan = undefined // scans all pre-defined networks if null
let scanPromise = webScanAll(
ipsToScan, // array. if undefined, scan major subnet gateways, then scan live subnets. supports wildcards
{
rtc: true, // use webrtc to detect local ips
logger: l => console.log(l), // logger callback
noRedirect: false, // if true, doesn't redirect from http to http - Chrome doesn't scan detect network IPs proprly on https atm
localCallback: function(ip) { console.log(`local ip callback: ${ip}`) },
subnetCallback: function(ip) { console.log(`router ip callback: ${ip}`) },
networkCallback: function(ip) { console.log(`network ip callback: ${ip}`) },
}
)
반환값
scanResults = {
"local": ["192.168.0.109"], // local ip address
"network": { // other hosts on the network and how fast they respond
"192.168.0.1": 97,
"192.168.0.2": 82,
"192.168.0.100": 46,
"192.168.0.109": 0,
"192.168.0.117": 74,
"192.168.0.113": 17,
"192.168.0.112": 21,
"192.168.0.114": 25,
"192.168.0.116": 25,
"192.168.0.115": 25,
"192.168.0.105": 57,
"192.168.0.107": 63,
"192.168.0.103": 64,
"192.168.0.108": 31
}
}
할 일
테스트 완료 대상