Linux Bridge 의 미 러 포트 구현

여러 가지 교환기 에서 미 러 포트 를 설정 할 수 있 습 니 다. 즉, 모든 트 래 픽 은 미 러 포트 에 보 내야 합 니 다. 보통 미 러 포트 에 호스트 를 연결 하고 그 위 에 스냅 백 이나 감사 프로그램 을 켜 서 네트워크 트 래 픽 을 항상 감시 해 야 합 니 다.미 러 포트 는 학습 형 교환기 가 가방 을 잡 을 수 없 는 문 제 를 해결 했다.    Linux 는 소프트웨어 버 전의 Bridge 를 실 현 했 습 니 다. 바로 교환기 입 니 다. 포트 가 적 을 뿐 brctl 을 통 해  setageingtime < brname > < time > 은 time 을 0 으로 설정 해도 이 소프트 교환 기 를 Hub 로 퇴화 시 킬 수 있 습 니 다.그러나 나 는 brctl 의 man 매 뉴 얼 에서 미 러 포트 를 설정 하 는 방법 에 대한 정 보 를 찾 지 못 해서 스스로 하 나 를 실현 했다.나의 실현 은 현재 하나의 미 러 포트 만 지원 하 는 상황 을 테스트 하 였 으 며, 당연히 여러 개 를 지원 하 는 것 으로 확장 하기 쉽다.전체적으로 말 하면 코드 에 대한 수정 은 두 가지 가 있다. 0. 기초 데이터 구조 에 대한 수정 netbridge_port 구조 체 에 flag 를 추가 하여 M 으로 설정 하여 이 포트 를 미 러 포트 로 표시 합 니 다.1.br_add_if 함수 에 인 자 를 추가 합 니 다. 이 인 자 는 미 러 포트 여 부 를 표시 합 니 다. 만약 에 새로 추 가 된 net 을 설정 합 니 다.bridge_port 의 M 표지 2. br 수정handle_frame_finish 함 수 는 여기 서 수정 하 는 것 이 가장 관건 입 니 다. 주로 아래 의 논리 가 있 습 니 다.
... if (skb) {     if (dst) {         if (!dst->dst->flags & M) {             struct net_bridge_port *p;             list_for_each_entry(p, &br->port_list, list) {                 if (p->flags & M) {                     struct sk_buff *skb3 = skb_clone(skb, GFP_ATOMIC);                     br_forward(dst->dst, skb3);                 }             }             }         br_forward(dst->dst, skb);     } else         br_flood_forward(br, skb); } ...

이상 0, 1, 2 는 기본적으로 미 러 포트 를 실현 하여 네트워크 캡 처 와 네트워크 디 버 깅 을 편리 하 게 할 수 있 습 니 다.사용자 상태의 brctl 도 수정 해 야 합 니 다. 간단 합 니 다. addif 에 M 플래그 를 입력 하면 됩 니 다.

좋은 웹페이지 즐겨찾기