PacketSender
PacketSender یک chain-head لایه ۳ برای ساخت و ارسال packetهای IPv4 مصنوعی است. این نود در startup یک packet store میسازد و packetها را در طول مدت تنظیمشده به شکل یکنواخت روی worker packet lineها پخش میکند.
جایگاه رایج
PacketSender -> IpManipulator -> RawSocket
PacketSender -> WireGuardDevice -> UdpStatelessSocket
نمونه تنظیم
{
"name": "packet-sender",
"type": "PacketSender",
"settings": {
"source-ip4-range": [
"198.51.100.0/24",
"203.0.113.0/24"
],
"dest-ip4": "203.0.113.20",
"protocol-number": "TCP",
"duration-ms": 5000,
"dest-port": 443,
"src-port": "random"
},
"next": "raw-ip"
}
تنظیمات ضروری
| گزینه | توضیح |
|---|---|
source-ip4-range | یک CIDR IPv4 یا آرایهای از CIDRها. نود برای هر IP در این رنج packet میسازد. |
dest-ip4 | مقصد IPv4 |
protocol-number | یکی از TCP، UDP، ICMP یا ALL |
duration-ms | مدت زمان پخش packetها به میلیثانیه |
dest-port | برای TCP، UDP و ALL لازم است |
src-port | برای TCP، UDP و ALL لازم است؛ عدد یا "random" |
راهنمای استفاده
- این نود با packet خام کار میکند؛ آن را در مسیر stream معمولی TCP قرار ندهید.
- برای تست مسیرهای
IpManipulator،RawSocketوWireGuardDeviceمفید است. PacketSenderباید ابتدای chain باشد و shared packet lineها را در runtime نابود نمیکند.- اگر سناریو شما تولید ترافیک stream است، معمولا
TesterClientمناسبتر است.
شکل packetهای تولیدشده
همه خروجیها IPv4 هستند و TTL پیشفرض 64 دارند.
| protocol-number | خروجی |
|---|---|
TCP | TCP segment حداقلی با flag ACK، checksum معتبر، destination port و source port تنظیمشده |
UDP | UDP datagram حداقلی با checksum معتبر و portهای تنظیمشده |
ICMP | ICMP echo request با checksum معتبر و identifier/sequence deterministic |
ALL | برای هر source IP دقیقا 255 packet، یکی برای protocol numberهای 0 تا 254 |
در حالت ALL، protocolهای 6، 17 و 1 به شکل معتبر TCP، UDP و ICMP ساخته میشوند و بقیه protocolها IPv4 packet معتبر با payload کوچک opaque هستند.
زمانبندی ارسال
PacketSender همه packetها را یکجا قبل از شروع ارسال materialize میکند، بعد deadline هر packet را براساس index آن، تعداد کل packetها و duration-ms حساب میکند. نتیجه این است که packetها در کل بازه تنظیمشده پخش میشوند و همه یکباره burst نمیشوند.
اگر چند packet به یک میلیثانیه بیفتند، همان worker آنها را پشت سر هم میفرستد.
مصرف حافظه
packet store به صورت contiguous ساخته میشود تا fragmentation کمتر شود. برای ایمنی، configهایی که packet store نهاییشان بیشتر از 512 MiB شود رد میشوند. اگر ترافیک بیشتری میخواهید، source range را کوچکتر کنید یا چند PacketSender جدا بسازید.
نکته
در mode ALL برای هر source IP تعداد 255 packet ساخته میشود؛ یکی برای protocol numberهای 0 تا 254. برای رنجهای بزرگ، حجم packet store میتواند زیاد شود.