홈>
인증서 유효성 검사를 통과하여 로컬 서버에 연결하려고합니다. 서버에서 파싱하는 방법을 모른다는 이상한 응답 메시지가 표시됩니다.
서버와 같은 Wi-Fi에 있으며 터미널에서 응답을받을 수 있습니다
openssl s_client -connect 18.21.19.162:9000
NSStreamSocketSecurityLevelKey에 대해 다른 보안 수준을 설정하려고했습니다. SSLSettings에 다른 값을 추가하려고 시도했습니다.
-(void)setSSL
{
NSLog(@"setting SSL");
NSDictionary *sslSettings = [ [NSDictionary alloc]initWithObjectsAndKeys:
[NSNumber numberWithBool:NO], kCFStreamSSLValidatesCertificateChain,
[NSNumber numberWithBool:NO], kCFStreamSSLIsServer,
nil ];
CFReadStreamSetProperty((CFReadStreamRef)inputStream,kCFStreamPropertySSLSettings, (CFTypeRef)sslSettings);
CFWriteStreamSetProperty((CFWriteStreamRef)outputStream, kCFStreamPropertySSLSettings, (CFTypeRef)sslSettings);
}
- (void)open {
NSLog(@"Opening streams.");
outputStream = (__bridge NSOutputStream *)writeStream;
inputStream = (__bridge NSInputStream *)readStream;
[outputStream setDelegate:self];
[inputStream setDelegate:self];
[outputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
[inputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
[inputStream setProperty:NSStreamSocketSecurityLevelTLSv1 forKey:NSStreamSocketSecurityLevelKey];
[outputStream open];
[inputStream open];
NSLog(@"connected");
}
- (IBAction)connectBtnEvent:(id)sender {
NSString *ip = @"18.21.19.162";
NSString *port = @"9000";
NSLog(@"Setting up connection to %@ : %i", ip, [port intValue]);
CFStreamCreatePairWithSocketToHost(kCFAllocatorDefault, (__bridge CFStringRef) ip, [port intValue], &readStream, &writeStream);
[self open];
}
- (void)stream:(NSStream *)theStream handleEvent:(NSStreamEvent)streamEvent {
NSLog(@"stream event %lu", streamEvent);
receivedData = @"";
switch (streamEvent) {
case NSStreamEventOpenCompleted:
{
NSLog(@"Stream opened");
[self setSSL];
}
break;
case NSStreamEventHasBytesAvailable:
{
//Trust object is available here
NSLog(@"has byte available");
if (theStream == inputStream)
{
uint8_t buffer[2048];
NSInteger len;
while ([inputStream hasBytesAvailable])
{
len = [inputStream read:buffer maxLength:sizeof(buffer)];
if (len > 0)
{
NSString *output = [[NSString alloc] initWithBytes:buffer length:len encoding:NSASCIIStringEncoding];
// NSString *output = [[NSString alloc] initWithBytes:buffer length:len encoding:NSUTF8StringEncoding];
if(receivedData == nil || receivedData.length == 0)
{
receivedData = output;
}
else
{
receivedData = [receivedData stringByAppendingString:output];
}
if (output != nil)
{
NSLog(@"server said: %@", output);
[self messageReceived:output];
}
}
}
NSLog(@"receieved data: %@", receivedData);
}
}
break;
case NSStreamEventHasSpaceAvailable:
{
//Trust object is available here
NSLog(@"Stream has space available");
}
break;
case NSStreamEventErrorOccurred:
{
NSLog(@"has error occured: %@",[theStream streamError].localizedDescription);
}
break;
case NSStreamEventEndEncountered:
{
[self close];
NSLog(@"end encounter");
}
break;
default:
NSLog(@"Unknown event");
break;
}
}
식별 핸드 셰이크 문자열을 볼 것으로 예상했습니다.
그러나 아래 출력이 있습니다. \ ^ B로 서버 응답, 그게 뭔지 확실하지 않거나 올바르게 구문 분석하지 않습니다.
2019-07-15 17:01:06.180575-0700 ProxyTest[3222:881204] Opening streams.
2019-07-15 17:01:06.186495-0700 ProxyTest[3222:881204] connected
2019-07-15 17:01:06.194703-0700 ProxyTest[3222:881204] stream event 1
2019-07-15 17:01:06.194795-0700 ProxyTest[3222:881204] Stream opened
2019-07-15 17:01:06.194822-0700 ProxyTest[3222:881204] setting SSL
2019-07-15 17:01:06.195147-0700 ProxyTest[3222:881204] stream event 1
2019-07-15 17:01:06.195197-0700 ProxyTest[3222:881204] Stream opened
2019-07-15 17:01:06.195218-0700 ProxyTest[3222:881204] setting SSL
2019-07-15 17:01:06.265101-0700 ProxyTest[3222:881204] stream event 4
2019-07-15 17:01:06.265194-0700 ProxyTest[3222:881204] Stream has space available
2019-07-15 17:01:06.266564-0700 ProxyTest[3222:881204] stream event 2
2019-07-15 17:01:06.266639-0700 ProxyTest[3222:881204] has byte available
2019-07-15 17:01:06.266703-0700 ProxyTest[3222:881204] server said: \^B
2019-07-15 17:01:06.266801-0700 ProxyTest[3222:881204] message got it: \^B
2019-07-15 17:01:06.266841-0700 ProxyTest[3222:881204] \^B
2019-07-15 17:01:06.266948-0700 ProxyTest[3222:881204] receieved data: \^B
2019-07-15 17:01:11.331533-0700 ProxyTest[3222:881204] stream event 2
2019-07-15 17:01:11.331686-0700 ProxyTest[3222:881204] has byte available
2019-07-15 17:01:11.331799-0700 ProxyTest[3222:881204] receieved data:
2019-07-15 17:01:11.331912-0700 ProxyTest[3222:881204] stream event 16
2019-07-15 17:01:11.331973-0700 ProxyTest[3222:881204] Closing streams.
2019-07-15 17:01:11.332337-0700 ProxyTest[3222:881204] Disconnected
2019-07-15 17:01:11.332390-0700 ProxyTest[3222:881204] end encounter
- 답변 # 1
관련 자료
- c# - Android 기기에서 소켓 연결 거부 오류
- 파이썬의 소켓 연결에서 이벤트 유형에 대한 키 누르기
- 파이썬 클라이언트의 연결을 거부하는 C 서버 소켓
- node.js - connection - keep-alive가 nodejs에서 http 요청에 대한 소켓 연결을 유지하지 않습니다
- c TCP의 소켓 연결을 어떻게 테스트합니까?
- javascript - 속성에 소켓 연결을 할당하면 해당 속성에 이벤트 리스너를 적용한 다음 다른 소켓을 할당하면 리스너가 계속 작동합니까?
- Windows Server에 Python 신호기 소켓 연결
- kotlin - Android 홈 화면 위젯에서 소켓 연결을 유지하는 방법
- android - Java 소켓 연결 예외 문제 (연결 시간 초과)
- android - Kotlin에서 개조를 사용한 소켓 연결
- javascript - 소켓 io 연결에서 살아있는 클라이언트 세션을 오랫동안 유지하는 방법
- 서버 파이썬에 대한 멀티 소켓 연결
- java - MVVM을 사용한 소켓 연결
- nativescript - xxxxx 기기에서 변경 사항을 적용 할 수 없습니다 오류 - 소켓 연결 시간이 초과되었습니다
- Google App Engine 표준 환경에서 Cloud SQL에 연결하기위한 소켓이 없습니다
- java - dataoutputstream에 쓰는 동안 소프트웨어에서 연결 중단이 발생했습니다 - 소켓 쓰기 오류
- Jsch 포트 포워딩을 통한 Java 소켓 연결
- 연결이 끊어진 후 C # TCP 소켓이 리 바인드 및 청취
- android - Wi-Fi 연결을 통해 소켓에 연결할 수 없습니다
- websocket - Mikrotik TCP/IP 소켓 연결
트렌드
- OpenCv의 폴더에서 여러 이미지 읽기 (python)
- 파이썬 셀레늄 모든 "href"속성 가져 오기
- html - 자바 스크립트 - 클릭 후 변경 버튼 텍스트 변경
- git commit - 자식 - 로컬 커밋 된 파일에 대한 변경을 취소하는 방법
- JSP에 대한 클래스를 컴파일 할 수 없습니다
- javascript - 현재 URL에서 특정 div 만 새로 고침/새로 고침
- jquery - JavaScript로 현재 세션 값을 얻으시겠습니까?
- javascript - swiperjs에서 정지, 재생 버튼 추가
- python - 문자열에서 특정 문자 제거
- JavaScript 변수를 HTML div에 '출력'하는 방법
답변을 스스로 찾으십시오. NSMutableData에 저장 한 다음 NSMutableData를 16 진수로 변환하고 16 진수를 다시 읽을 수있는 문자열로 변환하면됩니다. 식별 문자열을 볼 수있었습니다.