2012-10-07 2 views
1

파이썬이 내 네트워크를 청취하고 들어오는 모든 연결을 실행하는 동안 나열하도록하려고합니다. 그러나 나는 벽돌 벽에 부딪 쳤고, 어떻게 발견 할 수없는 것처럼 보였다. 어떤 제안? 파이썬 사용하기 2.7.3Python을 사용하여 Linux에서 들어오는 모든 연결을 나열합니다.

+0

여기에서 시작하십시오 : http://docs.python.org/library/socket.html. 또한 아마도 (C 기반) 소켓 API 튜토리얼은 Python 표준 라이브러리가 상당히 밀접하게 반영하기 때문에 가능합니다. (어떤 것이 좋을지는 모르겠지만 링크 된 문서는 몇 가지를 언급합니다.) – millimoose

+3

벽돌 벽을 정확히 쳤을 때 확장하십시오. 파이썬 인터프리터 시작하기? 사용할 라이브러리 찾기? 라이브러리를 사용하고 있습니까? – Kevin

+3

포트에서 수신 대기 중이거나 파이썬 응용 프로그램에서 네트워크를 적극적으로 감지하는 것에 대해 이야기하고 있습니까? – Drahkar

답변

2

@millimoose : 파이썬을 사용하는 모든 소켓에서 듣고 싶지는 않다고 생각합니다. 들어오는 모든 네트워크 연결을 나열 netstat을 사용할 수 있습니다 Python bindings to libpcap

+0

그래,이 일을, 고마워 (: – Ajukilibodin

0

귀하의 질문은 세부 사항에 매우 모호하지만, 당신이 원하는 모든 컴퓨터에 대한 인바운드 연결을 볼 경우, 당신은 그렇게 할 수 파이썬의 단지 몇 라인 : 사람도 netstat의 파이썬 구현을 작성했습니다.

from socket import * 

rawSocket = socket(AF_INET, SOCK_RAW, IPPROTO_TCP) 
rawSocket.bind(('IP_ON_IFACE_TO_LISTEN_ON', 0)) 

while True: 

    data = rawSocket.recv(2048) 

    # http://en.wikipedia.org/wiki/IPv4#Packet_structure 

    # Internet Header Length; Have to determine where the IP header ends 
    ihl = ord(data[0]) & 15 
    ip_payload = data[ihl*4:] 

    # http://en.wikipedia.org/wiki/Transmission_Control_Protocol#TCP_segment_structure 

    # Match SYN but not SYN/ACK 
    if (ord(ip_payload[13]) & 18) == 2: 
     src_addr = inet_ntoa(data[12:16]) 
     dst_addr = inet_ntoa(data[16:20]) 

     # Could use struct.unpack, might be clearer 
     src_port = (ord(ip_payload[0]) << 8) + ord(ip_payload[1]) 
     dst_port = (ord(ip_payload[2]) << 8) + ord(ip_payload[3]) 

     src_str = (src_addr+':'+str(src_port)).ljust(22) 
     dst_str = (dst_addr+':'+str(dst_port)) 

     print "%s=> %s" % (src_str, dst_str) 

이렇게하면 RST 또는 ICMP 응답에 관계없이 SYN 플래그가 설정된 모든 인바운드 TCP 패킷이 인쇄됩니다. 귀하의 질문에 '들어오는 모든 연결 목록', UDP는 연결이 없기 때문에, 으로 가정합니다.

FWIW

관련 문제