diff --git a/docs/rlnctest.md b/docs/rlnctest.md new file mode 100644 index 0000000..e1e841c --- /dev/null +++ b/docs/rlnctest.md @@ -0,0 +1,250 @@ +# P2P Binary Deployment & Testing Guide + +## Step 1 — Push Changes to `optimum-p2p` + +Ensure all your changes have been pushed to the `optimum-p2p` repository before proceeding. + +--- + +## Step 2 — Update the Dependency in `optimum-proxy` + +In the `optimum-proxy` repository, open `go.mod` and update the `require` section to reference the newly pushed version of `optimum-p2p`: + +```go +github.com/getoptimum/optimum-p2p +``` + +Replace `` with the version tag you just pushed (e.g. `v0.0.1-rc13`), then run: + +```bash +go get github.com/getoptimum/optimum-p2p@ +go mod tidy +``` + +--- + +## Step 3 — Build the Binary + +From the `optimum-proxy` repository root, build the P2P binary: + +```bash +make build +``` + +--- + +## Step 4 — Deploy the Binary + +Move the compiled `p2p-client` binary to the infrastructure repository: + +```bash +mv ./p2p-client optimum-infra/optimump2p-native/data/p2pnode-rlnc-arch-test +``` + +Note: The build also produces `p2p-multi-publish` and `p2p-multi-subscribe` binaries, which are used for testing (see Step 8). + +--- + +## Step 5 — Start Local Nodes + +Run 50 local nodes: + +```bash +./run-local 50 +``` + +--- + +## Step 6 — Start the RLNC Server + +Build and start the RLNC server: + +```bash +go run cmd/server/main.go +``` + +--- + +## Step 7 — Verify All Nodes Are Running + +```bash +./run-local list +``` + +Confirm that all 50 processes appear in the output before proceeding. + +--- + +## Step 8 — Test Publish/Subscribe via gRPC + +Use the publish/subscribe tools from the `optimum-dev-local-setup` repository. See below for full usage instructions. + +--- + +# P2P Client Multi-Stream Tools + +Tools for publishing and subscribing to P2P network topics via gRPC streams. + +## Prerequisites + +- Go compiler installed +- A file containing P2P node addresses in `IP:PORT` format, one per line (e.g. `ip.p2pnode.bnb.tsv`) + +--- + +## Building the Binaries + +Build both tools before use: + +```bash +go build -o p2p-multi-publish p2p_client_multi_streams_publish.go +go build -o p2p-multi-subscribe p2p_client_multi_streams_subscribe.go +``` + +This produces two executables: + +| Binary | Role | +|---|---| +| `p2p-multi-publish` | Publishes messages to a topic across multiple nodes | +| `p2p-multi-subscribe` | Subscribes to a topic and listens for messages across multiple nodes | + +--- + +## Publisher + +Connects to multiple P2P nodes and publishes messages to a specified topic. + +### Usage + +```bash +./p2p-multi-publish [options] +``` + +### Options + +| Flag | Type | Default | Description | +|---|---|---|---| +| `-topic` | string | *(required)* | Topic name to publish to | +| `-ipfile` | string | — | Path to file containing node addresses | +| `-count` | int | 1 | Number of messages to publish per node | +| `-datasize` | int | 100 | Size of random message payload in bytes | +| `-start-index` | int | 0 | First index to use from the IP file | +| `-end-index` | int | 10000 | Last index to use from the IP file | +| `-output` | string | — | File to write outgoing message hashes | +| `-sleep` | duration | 50ms | Delay between consecutive publishes (e.g. `1s`, `500ms`) | +| `-poisson` | bool | false | Enable Poisson arrival distribution for publishing | + +### Examples + +**Basic** — publish 2 messages to the first 5 nodes: + +```bash +./p2p-multi-publish \ + -count 2 -datasize 100 \ + -start-index 0 -end-index 5 \ + -ipfile ip.p2pnode.bnb.tsv \ + -output outgoing-hash.txt \ + -sleep 500ms -topic test-topic +``` + +**Production** — publish 3 messages to 20 nodes: + +```bash +./p2p-multi-publish \ + -count 3 -datasize 12222 \ + -start-index 0 -end-index 20 \ + -ipfile ip.p2pnode.bnb.tsv \ + -output outgoing-data-hash.txt \ + -sleep 1s -topic mytopic +``` + +### Output Format + +The output file is tab-separated (TSV): + +```tsv +sender size sha256(msg) +34.127.26.15:33212 119 03fb89f1791f9bd70fa959a8acbae9dd... +``` + +--- + +## Subscriber + +Connects to multiple P2P nodes and listens for messages on a specified topic. Runs indefinitely until interrupted with `Ctrl+C`. + +### Usage + +```bash +./p2p-multi-subscribe [options] +``` + +### Options + +| Flag | Type | Default | Description | +|---|---|---|---| +| `-topic` | string | *(required)* | Topic name to subscribe to | +| `-ipfile` | string | — | Path to file containing node addresses | +| `-start-index` | int | 0 | First index to use from the IP file | +| `-end-index` | int | 10000 | Last index to use from the IP file | +| `-output-data` | string | — | File to write received message hashes | +| `-output-trace` | string | — | File to write trace information | + +### Examples + +**Basic** — subscribe on first 5 nodes: + +```bash +./p2p-multi-subscribe \ + -end-index 5 \ + -ipfile ip.p2pnode.bnb.tsv \ + -output-data incoming-hash.txt \ + -topic test-topic +``` + +**Production** — subscribe on 20 nodes: + +```bash +./p2p-multi-subscribe \ + -end-index 20 \ + -ipfile ip.p2pnode.bnb.tsv \ + -output-data incoming-data-hash.txt \ + -topic mytopic +``` + +### Output Format + +The output file is tab-separated (TSV): + +```tsv +receiver sender size sha256(msg) +34.187.253.56:33212 [binary data] 12453 1b4bca4ab3703d64... +``` + +--- + +## End-to-End Test + +**Terminal 1 — start the subscriber:** + +```bash +./p2p-multi-subscribe \ + -end-index 5 \ + -ipfile ip.p2pnode.bnb.tsv \ + -output-data test-incoming.txt \ + -topic test-topic +``` + +**Terminal 2 — run the publisher:** + +```bash +./p2p-multi-publish \ + -count 2 -datasize 100 \ + -end-index 5 \ + -ipfile ip.p2pnode.bnb.tsv \ + -output test-outgoing.txt \ + -sleep 500ms -topic test-topic +``` + +Verify that message hashes in `test-outgoing.txt` appear in `test-incoming.txt`. + diff --git a/grpc_p2p_client/local.ips.tsv b/grpc_p2p_client/local.ips.tsv index c06dbd9..33f1df0 100644 --- a/grpc_p2p_client/local.ips.tsv +++ b/grpc_p2p_client/local.ips.tsv @@ -3,999 +3,3 @@ localhost:33213 localhost:33214 localhost:33215 localhost:33216 -localhost:33217 -localhost:33218 -localhost:33219 -localhost:33220 -localhost:33221 -localhost:33222 -localhost:33223 -localhost:33224 -localhost:33225 -localhost:33226 -localhost:33227 -localhost:33228 -localhost:33229 -localhost:33230 -localhost:33231 -localhost:33232 -localhost:33233 -localhost:33234 -localhost:33235 -localhost:33236 -localhost:33237 -localhost:33238 -localhost:33239 -localhost:33240 -localhost:33241 -localhost:33242 -localhost:33243 -localhost:33244 -localhost:33245 -localhost:33246 -localhost:33247 -localhost:33248 -localhost:33249 -localhost:33250 -localhost:33251 -localhost:33252 -localhost:33253 -localhost:33254 -localhost:33255 -localhost:33256 -localhost:33257 -localhost:33258 -localhost:33259 -localhost:33260 -localhost:33261 -localhost:33262 -localhost:33263 -localhost:33264 -localhost:33265 -localhost:33266 -localhost:33267 -localhost:33268 -localhost:33269 -localhost:33270 -localhost:33271 -localhost:33272 -localhost:33273 -localhost:33274 -localhost:33275 -localhost:33276 -localhost:33277 -localhost:33278 -localhost:33279 -localhost:33280 -localhost:33281 -localhost:33282 -localhost:33283 -localhost:33284 -localhost:33285 -localhost:33286 -localhost:33287 -localhost:33288 -localhost:33289 -localhost:33290 -localhost:33291 -localhost:33292 -localhost:33293 -localhost:33294 -localhost:33295 -localhost:33296 -localhost:33297 -localhost:33298 -localhost:33299 -localhost:33300 -localhost:33301 -localhost:33302 -localhost:33303 -localhost:33304 -localhost:33305 -localhost:33306 -localhost:33307 -localhost:33308 -localhost:33309 -localhost:33310 -localhost:33311 -localhost:33312 -localhost:33313 -localhost:33314 -localhost:33315 -localhost:33316 -localhost:33317 -localhost:33318 -localhost:33319 -localhost:33320 -localhost:33321 -localhost:33322 -localhost:33323 -localhost:33324 -localhost:33325 -localhost:33326 -localhost:33327 -localhost:33328 -localhost:33329 -localhost:33330 -localhost:33331 -localhost:33332 -localhost:33333 -localhost:33334 -localhost:33335 -localhost:33336 -localhost:33337 -localhost:33338 -localhost:33339 -localhost:33340 -localhost:33341 -localhost:33342 -localhost:33343 -localhost:33344 -localhost:33345 -localhost:33346 -localhost:33347 -localhost:33348 -localhost:33349 -localhost:33350 -localhost:33351 -localhost:33352 -localhost:33353 -localhost:33354 -localhost:33355 -localhost:33356 -localhost:33357 -localhost:33358 -localhost:33359 -localhost:33360 -localhost:33361 -localhost:33362 -localhost:33363 -localhost:33364 -localhost:33365 -localhost:33366 -localhost:33367 -localhost:33368 -localhost:33369 -localhost:33370 -localhost:33371 -localhost:33372 -localhost:33373 -localhost:33374 -localhost:33375 -localhost:33376 -localhost:33377 -localhost:33378 -localhost:33379 -localhost:33380 -localhost:33381 -localhost:33382 -localhost:33383 -localhost:33384 -localhost:33385 -localhost:33386 -localhost:33387 -localhost:33388 -localhost:33389 -localhost:33390 -localhost:33391 -localhost:33392 -localhost:33393 -localhost:33394 -localhost:33395 -localhost:33396 -localhost:33397 -localhost:33398 -localhost:33399 -localhost:33400 -localhost:33401 -localhost:33402 -localhost:33403 -localhost:33404 -localhost:33405 -localhost:33406 -localhost:33407 -localhost:33408 -localhost:33409 -localhost:33410 -localhost:33411 -localhost:33412 -localhost:33413 -localhost:33414 -localhost:33415 -localhost:33416 -localhost:33417 -localhost:33418 -localhost:33419 -localhost:33420 -localhost:33421 -localhost:33422 -localhost:33423 -localhost:33424 -localhost:33425 -localhost:33426 -localhost:33427 -localhost:33428 -localhost:33429 -localhost:33430 -localhost:33431 -localhost:33432 -localhost:33433 -localhost:33434 -localhost:33435 -localhost:33436 -localhost:33437 -localhost:33438 -localhost:33439 -localhost:33440 -localhost:33441 -localhost:33442 -localhost:33443 -localhost:33444 -localhost:33445 -localhost:33446 -localhost:33447 -localhost:33448 -localhost:33449 -localhost:33450 -localhost:33451 -localhost:33452 -localhost:33453 -localhost:33454 -localhost:33455 -localhost:33456 -localhost:33457 -localhost:33458 -localhost:33459 -localhost:33460 -localhost:33461 -localhost:33462 -localhost:33463 -localhost:33464 -localhost:33465 -localhost:33466 -localhost:33467 -localhost:33468 -localhost:33469 -localhost:33470 -localhost:33471 -localhost:33472 -localhost:33473 -localhost:33474 -localhost:33475 -localhost:33476 -localhost:33477 -localhost:33478 -localhost:33479 -localhost:33480 -localhost:33481 -localhost:33482 -localhost:33483 -localhost:33484 -localhost:33485 -localhost:33486 -localhost:33487 -localhost:33488 -localhost:33489 -localhost:33490 -localhost:33491 -localhost:33492 -localhost:33493 -localhost:33494 -localhost:33495 -localhost:33496 -localhost:33497 -localhost:33498 -localhost:33499 -localhost:33500 -localhost:33501 -localhost:33502 -localhost:33503 -localhost:33504 -localhost:33505 -localhost:33506 -localhost:33507 -localhost:33508 -localhost:33509 -localhost:33510 -localhost:33511 -localhost:33512 -localhost:33513 -localhost:33514 -localhost:33515 -localhost:33516 -localhost:33517 -localhost:33518 -localhost:33519 -localhost:33520 -localhost:33521 -localhost:33522 -localhost:33523 -localhost:33524 -localhost:33525 -localhost:33526 -localhost:33527 -localhost:33528 -localhost:33529 -localhost:33530 -localhost:33531 -localhost:33532 -localhost:33533 -localhost:33534 -localhost:33535 -localhost:33536 -localhost:33537 -localhost:33538 -localhost:33539 -localhost:33540 -localhost:33541 -localhost:33542 -localhost:33543 -localhost:33544 -localhost:33545 -localhost:33546 -localhost:33547 -localhost:33548 -localhost:33549 -localhost:33550 -localhost:33551 -localhost:33552 -localhost:33553 -localhost:33554 -localhost:33555 -localhost:33556 -localhost:33557 -localhost:33558 -localhost:33559 -localhost:33560 -localhost:33561 -localhost:33562 -localhost:33563 -localhost:33564 -localhost:33565 -localhost:33566 -localhost:33567 -localhost:33568 -localhost:33569 -localhost:33570 -localhost:33571 -localhost:33572 -localhost:33573 -localhost:33574 -localhost:33575 -localhost:33576 -localhost:33577 -localhost:33578 -localhost:33579 -localhost:33580 -localhost:33581 -localhost:33582 -localhost:33583 -localhost:33584 -localhost:33585 -localhost:33586 -localhost:33587 -localhost:33588 -localhost:33589 -localhost:33590 -localhost:33591 -localhost:33592 -localhost:33593 -localhost:33594 -localhost:33595 -localhost:33596 -localhost:33597 -localhost:33598 -localhost:33599 -localhost:33600 -localhost:33601 -localhost:33602 -localhost:33603 -localhost:33604 -localhost:33605 -localhost:33606 -localhost:33607 -localhost:33608 -localhost:33609 -localhost:33610 -localhost:33611 -localhost:33612 -localhost:33613 -localhost:33614 -localhost:33615 -localhost:33616 -localhost:33617 -localhost:33618 -localhost:33619 -localhost:33620 -localhost:33621 -localhost:33622 -localhost:33623 -localhost:33624 -localhost:33625 -localhost:33626 -localhost:33627 -localhost:33628 -localhost:33629 -localhost:33630 -localhost:33631 -localhost:33632 -localhost:33633 -localhost:33634 -localhost:33635 -localhost:33636 -localhost:33637 -localhost:33638 -localhost:33639 -localhost:33640 -localhost:33641 -localhost:33642 -localhost:33643 -localhost:33644 -localhost:33645 -localhost:33646 -localhost:33647 -localhost:33648 -localhost:33649 -localhost:33650 -localhost:33651 -localhost:33652 -localhost:33653 -localhost:33654 -localhost:33655 -localhost:33656 -localhost:33657 -localhost:33658 -localhost:33659 -localhost:33660 -localhost:33661 -localhost:33662 -localhost:33663 -localhost:33664 -localhost:33665 -localhost:33666 -localhost:33667 -localhost:33668 -localhost:33669 -localhost:33670 -localhost:33671 -localhost:33672 -localhost:33673 -localhost:33674 -localhost:33675 -localhost:33676 -localhost:33677 -localhost:33678 -localhost:33679 -localhost:33680 -localhost:33681 -localhost:33682 -localhost:33683 -localhost:33684 -localhost:33685 -localhost:33686 -localhost:33687 -localhost:33688 -localhost:33689 -localhost:33690 -localhost:33691 -localhost:33692 -localhost:33693 -localhost:33694 -localhost:33695 -localhost:33696 -localhost:33697 -localhost:33698 -localhost:33699 -localhost:33700 -localhost:33701 -localhost:33702 -localhost:33703 -localhost:33704 -localhost:33705 -localhost:33706 -localhost:33707 -localhost:33708 -localhost:33709 -localhost:33710 -localhost:33711 -localhost:33712 -localhost:33713 -localhost:33714 -localhost:33715 -localhost:33716 -localhost:33717 -localhost:33718 -localhost:33719 -localhost:33720 -localhost:33721 -localhost:33722 -localhost:33723 -localhost:33724 -localhost:33725 -localhost:33726 -localhost:33727 -localhost:33728 -localhost:33729 -localhost:33730 -localhost:33731 -localhost:33732 -localhost:33733 -localhost:33734 -localhost:33735 -localhost:33736 -localhost:33737 -localhost:33738 -localhost:33739 -localhost:33740 -localhost:33741 -localhost:33742 -localhost:33743 -localhost:33744 -localhost:33745 -localhost:33746 -localhost:33747 -localhost:33748 -localhost:33749 -localhost:33750 -localhost:33751 -localhost:33752 -localhost:33753 -localhost:33754 -localhost:33755 -localhost:33756 -localhost:33757 -localhost:33758 -localhost:33759 -localhost:33760 -localhost:33761 -localhost:33762 -localhost:33763 -localhost:33764 -localhost:33765 -localhost:33766 -localhost:33767 -localhost:33768 -localhost:33769 -localhost:33770 -localhost:33771 -localhost:33772 -localhost:33773 -localhost:33774 -localhost:33775 -localhost:33776 -localhost:33777 -localhost:33778 -localhost:33779 -localhost:33780 -localhost:33781 -localhost:33782 -localhost:33783 -localhost:33784 -localhost:33785 -localhost:33786 -localhost:33787 -localhost:33788 -localhost:33789 -localhost:33790 -localhost:33791 -localhost:33792 -localhost:33793 -localhost:33794 -localhost:33795 -localhost:33796 -localhost:33797 -localhost:33798 -localhost:33799 -localhost:33800 -localhost:33801 -localhost:33802 -localhost:33803 -localhost:33804 -localhost:33805 -localhost:33806 -localhost:33807 -localhost:33808 -localhost:33809 -localhost:33810 -localhost:33811 -localhost:33812 -localhost:33813 -localhost:33814 -localhost:33815 -localhost:33816 -localhost:33817 -localhost:33818 -localhost:33819 -localhost:33820 -localhost:33821 -localhost:33822 -localhost:33823 -localhost:33824 -localhost:33825 -localhost:33826 -localhost:33827 -localhost:33828 -localhost:33829 -localhost:33830 -localhost:33831 -localhost:33832 -localhost:33833 -localhost:33834 -localhost:33835 -localhost:33836 -localhost:33837 -localhost:33838 -localhost:33839 -localhost:33840 -localhost:33841 -localhost:33842 -localhost:33843 -localhost:33844 -localhost:33845 -localhost:33846 -localhost:33847 -localhost:33848 -localhost:33849 -localhost:33850 -localhost:33851 -localhost:33852 -localhost:33853 -localhost:33854 -localhost:33855 -localhost:33856 -localhost:33857 -localhost:33858 -localhost:33859 -localhost:33860 -localhost:33861 -localhost:33862 -localhost:33863 -localhost:33864 -localhost:33865 -localhost:33866 -localhost:33867 -localhost:33868 -localhost:33869 -localhost:33870 -localhost:33871 -localhost:33872 -localhost:33873 -localhost:33874 -localhost:33875 -localhost:33876 -localhost:33877 -localhost:33878 -localhost:33879 -localhost:33880 -localhost:33881 -localhost:33882 -localhost:33883 -localhost:33884 -localhost:33885 -localhost:33886 -localhost:33887 -localhost:33888 -localhost:33889 -localhost:33890 -localhost:33891 -localhost:33892 -localhost:33893 -localhost:33894 -localhost:33895 -localhost:33896 -localhost:33897 -localhost:33898 -localhost:33899 -localhost:33900 -localhost:33901 -localhost:33902 -localhost:33903 -localhost:33904 -localhost:33905 -localhost:33906 -localhost:33907 -localhost:33908 -localhost:33909 -localhost:33910 -localhost:33911 -localhost:33912 -localhost:33913 -localhost:33914 -localhost:33915 -localhost:33916 -localhost:33917 -localhost:33918 -localhost:33919 -localhost:33920 -localhost:33921 -localhost:33922 -localhost:33923 -localhost:33924 -localhost:33925 -localhost:33926 -localhost:33927 -localhost:33928 -localhost:33929 -localhost:33930 -localhost:33931 -localhost:33932 -localhost:33933 -localhost:33934 -localhost:33935 -localhost:33936 -localhost:33937 -localhost:33938 -localhost:33939 -localhost:33940 -localhost:33941 -localhost:33942 -localhost:33943 -localhost:33944 -localhost:33945 -localhost:33946 -localhost:33947 -localhost:33948 -localhost:33949 -localhost:33950 -localhost:33951 -localhost:33952 -localhost:33953 -localhost:33954 -localhost:33955 -localhost:33956 -localhost:33957 -localhost:33958 -localhost:33959 -localhost:33960 -localhost:33961 -localhost:33962 -localhost:33963 -localhost:33964 -localhost:33965 -localhost:33966 -localhost:33967 -localhost:33968 -localhost:33969 -localhost:33970 -localhost:33971 -localhost:33972 -localhost:33973 -localhost:33974 -localhost:33975 -localhost:33976 -localhost:33977 -localhost:33978 -localhost:33979 -localhost:33980 -localhost:33981 -localhost:33982 -localhost:33983 -localhost:33984 -localhost:33985 -localhost:33986 -localhost:33987 -localhost:33988 -localhost:33989 -localhost:33990 -localhost:33991 -localhost:33992 -localhost:33993 -localhost:33994 -localhost:33995 -localhost:33996 -localhost:33997 -localhost:33998 -localhost:33999 -localhost:34000 -localhost:34001 -localhost:34002 -localhost:34003 -localhost:34004 -localhost:34005 -localhost:34006 -localhost:34007 -localhost:34008 -localhost:34009 -localhost:34010 -localhost:34011 -localhost:34012 -localhost:34013 -localhost:34014 -localhost:34015 -localhost:34016 -localhost:34017 -localhost:34018 -localhost:34019 -localhost:34020 -localhost:34021 -localhost:34022 -localhost:34023 -localhost:34024 -localhost:34025 -localhost:34026 -localhost:34027 -localhost:34028 -localhost:34029 -localhost:34030 -localhost:34031 -localhost:34032 -localhost:34033 -localhost:34034 -localhost:34035 -localhost:34036 -localhost:34037 -localhost:34038 -localhost:34039 -localhost:34040 -localhost:34041 -localhost:34042 -localhost:34043 -localhost:34044 -localhost:34045 -localhost:34046 -localhost:34047 -localhost:34048 -localhost:34049 -localhost:34050 -localhost:34051 -localhost:34052 -localhost:34053 -localhost:34054 -localhost:34055 -localhost:34056 -localhost:34057 -localhost:34058 -localhost:34059 -localhost:34060 -localhost:34061 -localhost:34062 -localhost:34063 -localhost:34064 -localhost:34065 -localhost:34066 -localhost:34067 -localhost:34068 -localhost:34069 -localhost:34070 -localhost:34071 -localhost:34072 -localhost:34073 -localhost:34074 -localhost:34075 -localhost:34076 -localhost:34077 -localhost:34078 -localhost:34079 -localhost:34080 -localhost:34081 -localhost:34082 -localhost:34083 -localhost:34084 -localhost:34085 -localhost:34086 -localhost:34087 -localhost:34088 -localhost:34089 -localhost:34090 -localhost:34091 -localhost:34092 -localhost:34093 -localhost:34094 -localhost:34095 -localhost:34096 -localhost:34097 -localhost:34098 -localhost:34099 -localhost:34100 -localhost:34101 -localhost:34102 -localhost:34103 -localhost:34104 -localhost:34105 -localhost:34106 -localhost:34107 -localhost:34108 -localhost:34109 -localhost:34110 -localhost:34111 -localhost:34112 -localhost:34113 -localhost:34114 -localhost:34115 -localhost:34116 -localhost:34117 -localhost:34118 -localhost:34119 -localhost:34120 -localhost:34121 -localhost:34122 -localhost:34123 -localhost:34124 -localhost:34125 -localhost:34126 -localhost:34127 -localhost:34128 -localhost:34129 -localhost:34130 -localhost:34131 -localhost:34132 -localhost:34133 -localhost:34134 -localhost:34135 -localhost:34136 -localhost:34137 -localhost:34138 -localhost:34139 -localhost:34140 -localhost:34141 -localhost:34142 -localhost:34143 -localhost:34144 -localhost:34145 -localhost:34146 -localhost:34147 -localhost:34148 -localhost:34149 -localhost:34150 -localhost:34151 -localhost:34152 -localhost:34153 -localhost:34154 -localhost:34155 -localhost:34156 -localhost:34157 -localhost:34158 -localhost:34159 -localhost:34160 -localhost:34161 -localhost:34162 -localhost:34163 -localhost:34164 -localhost:34165 -localhost:34166 -localhost:34167 -localhost:34168 -localhost:34169 -localhost:34170 -localhost:34171 -localhost:34172 -localhost:34173 -localhost:34174 -localhost:34175 -localhost:34176 -localhost:34177 -localhost:34178 -localhost:34179 -localhost:34180 -localhost:34181 -localhost:34182 -localhost:34183 -localhost:34184 -localhost:34185 -localhost:34186 -localhost:34187 -localhost:34188 -localhost:34189 -localhost:34190 -localhost:34191 -localhost:34192 -localhost:34193 -localhost:34194 -localhost:34195 -localhost:34196 -localhost:34197 -localhost:34198 -localhost:34199 -localhost:34200 -localhost:34201 -localhost:34202 -localhost:34203 -localhost:34204 -localhost:34205 -localhost:34206 -localhost:34207 -localhost:34208 -localhost:34209 -localhost:34210 -localhost:34211 -localhost:34212