2013-05-23 2 views
-1

네트워크 소켓에서 데이터를 가져 와서 특정 데이터 시퀀스를 찾는 데이터를 스캔하는 Python 프로그램을 작성하고 싶습니다.파이썬 네트워크 소켓에서 바이트를 읽음

'네트워크에서 가져 오기'비트가 정상적으로 작동하고 검색된 데이터를 아무 문제없이 파일에 덤프 할 수 있지만 파이썬이 실제로 한 번에 한 바이트 씩 데이터를 스캔하도록하는 것은 효과가 없습니다.

'for byte'루프에서 일을 시도하고 코드를 삽입 할 때마다 나는 아무 것도 일어나지 않습니다.

아래의 프로그램을 실행할 때, byte.out의 크기는 보통 buf.out의 크기의 두 배가되는데, 이는 잘못 된 부분을 가리키는 주요 증상이라고 생각합니다. 내부 루프가 실제로 바이트 단위로 데이터를 처리하는 경우 두 출력 파일이 동일한 크기가 될 것으로 예상됩니다.

내 생각에 "chr (buf)의 바이트"에 대한 잘못된 점이 있지만 실제로 여기에 무엇을 넣어야할지 모르겠다.

import socket 

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) 

fh1 = open("buf.out", 'wb') 
fh2 = open("byte.out", 'wb') 

s.connect(("obscured.url", 9999)) 
s.send('GET /xx HTTP/1.1\nHost obscured.url:9999\n\n') 

for i in range(10): 
    buf = s.recv(1024) 

    for byte in chr(buf): 
     print >>fh2, byte 

    print >>fh1, buf 
s.close 
+0

'chr (buf)'대신'str (buf)'를 사용해보십시오. – akaIDIOT

+1

아니면'for byte in buf'입니까? 모든 바이트에 대해 개행 문자를 인쇄하기 때문에 크기가 두 배가됩니까? -'print >> fh2, byte,'를 원하셨습니까? – RichieHindle

+0

'urllib' 또는'urllib2'를 사용하지 않는 특별한 이유가 있습니까? – glglgl

답변

0

chr(buf)에는 TypeError가 있어야합니다. 사용

for byte in buf: 
관련 문제