python tcpdump 패키지 필터 링 방법

본 고 는 python 호출 tcpdump 패키지 필터 의 구체 적 인 코드 를 여러분 에 게 공유 하 였 으 며,구체 적 인 내용 은 다음 과 같 습 니 다.
이전에 Liux 에서 python 스 크 립 트 로 패키지 분석 도 구 를 썼 습 니 다.libpcap,pypcap 같은 것 을 사용 하고 싶 지 않 아서 tcpdump 에 grep 를 넣 어서 간단하게 해 결 했 습 니 다.기본 적 인 사 고 는 tcpdump 와 grep 두 프로 세 스 를 각각 시작 하 는 것 입 니 다.프로 세 스 는 직접 pipe 를 통 해 데 이 터 를 교환 합 니 다.간단 한 코드 는 다음 과 같 습 니 다.

#! /usr/bin/python
 
def tcpdump():
 import subprocess, fcntl, os
 # sudo tcpdump -i eth0 -n -s 0 -w - | grep -a -o -E "Host: .*|GET /.*"
 cmd1 = ['tcpdump', '-i', 'eth0', '-n','-B', '4096','-s', '0', '-w', '-']
 cmd2 = ['grep', '--line-buffered', '-a', '-o', '-E', 'Host: .*|GET /.*']
 p1 = subprocess.Popen(cmd1, stdout=subprocess.PIPE)
 p2 = subprocess.Popen(cmd2, stdout=subprocess.PIPE, stdin=p1.stdout)
 
 flags = fcntl.fcntl(p2.stdout.fileno(), fcntl.F_GETFL)
 fcntl.fcntl(p2.stdout.fileno(), fcntl.F_SETFL, (flags | os.O_NDELAY | os.O_NONBLOCK))
 return p2
 
 
def poll_tcpdump(proc):
 #print 'poll_tcpdump....'
 import select
 txt = None
 while True:
 # wait 1/10 second 
 readReady, _, _ = select.select([proc.stdout.fileno()], [], [], 0.1)
 if not len(readReady):
  break
 try:
  for line in iter(proc.stdout.readline, ""):
  if txt is None:
   txt = ''
  txt += line
 except IOError:
  print 'data empty...'
  pass
 break
 return txt
 
 
proc = tcpdump()
while True:
 text = poll_tcpdump(proc)
 if text:
 print '>>>> ' + text
실행 효과:

그 중에서 tcpdump 에서'-B','4096'이라는 매개 변 수 를 주의해 야 합 니 다.공식 문 서 는 명확 하 게 언급 되 지 않 은 것 같 지만 가방 을 잃 어 버 린 것 을 해결 하 는 관건 적 인 부분 중 하나 입 니 다.물론-s 라 는 매개 변수 도 잘 이용 해 야 합 니 다!다른 건 자 유 롭 게 할 수 있어 요!
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기