如何在Perl中獲得raw套接字,然後構建一個用於它的數據包的最佳方法是什麼?如何在Perl中使用原始套接字?
4
A
回答
4
貌似Net::RawIP就是我一直在尋找:
use Net::RawIP;
$a = new Net::RawIP;
$a->set({ip => {saddr => 'my.target.lan',daddr => 'my.target.lan'},
tcp => {source => 139,dest => 139,psh => 1, syn => 1}});
$a->send;
$a->ethnew("eth0");
$a->ethset(source => 'my.target.lan',dest =>'my.target.lan');
$a->ethsend;
$p = $a->pcapinit("eth0","dst port 21",1500,30);
$f = dump_open($p,"/my/home/log");
loop $p,10,\&dump,$f;
6
也許搜索CPAN可能有幫助嗎?想起了IO::Socket。
1
獲取套接字的基本調用是...... socket()。它帶有標準的perl 5. perl 5基本上爲您提供傳統UNIX所執行的標準socket(),bind(),listen(),accept()調用。
對於更多面向對象的模型,請查看IO :: Socket。
7
3
由於austirg和其他人說,插座將這樣做只是罰款:
use Socket;
socket my $socket, PF_INET, SOCK_RAW, 0 or die "Couldn't create raw socket: $!";
send $socket, $message, $flags, $to or die "Couldn't send packet: $!";
my $from = recv $socket, $message, $length, $flags or die "Couldn't receive from socket: $!";
5
起初我想,大多數以前的答案對這個問題沒有迴應。 經過進一步的思考,我認爲作者可能沒有提出正確的問題。
如果你正在編寫一個應用程序,你通常不會想到「構建數據包」。您只需打開套接字,格式化數據有效載荷,並且它是與您的數據一起構建數據包的協議棧。好的,如果你使用數據報,你需要定義,生成和分析你的有效載荷。但是,通常讓內核在網絡級別(例如添加IP標頭)或鏈路層(例如添加以太網幀)封裝它。你通常不使用pcap。有時候只是打包和解包,也許vec就足夠了。
如果你正在編寫一個不尋常的數據包處理器,例如一個活躍的惡意攻擊工具,一箇中間人過程或一個流量整形設備,那麼它將更有可能是「構建數據包」並使用PCAP。也許Net :: Packet也適合你。
0
請注意,如果您嘗試使用原始套接字發送一堆SYN數據包,並且您只是「使用套接字」;這將填滿你的ARP表,並用「無緩衝空間」和「netstat」中的一堆「CLOSE_WAIT」條目進行彈出(這會阻止你的機器進行任何類型的連接,直到它們中的一部分空閒)。
換句話說 - 你真的需要Net :: RawIP - 它有所作爲。
相關問題
- 1. 使用原始套接字
- 2. 如何在Java中使用ZeroMQ創建原始套接字?
- 3. 如何在WinCE5中使用原始套接字?
- 4. 使用原始套接字(C++)
- 5. recv與原始套接字
- 6. UDP - 原始套接字 - C#
- 7. Scapy的原始套接字
- 8. Lua:原始套接字
- 9. 如何在Linux中使用原始套接字接收bpdu流量C
- 10. 如何使用原始套接字ping本地主機?
- 11. 如何使用telnet或原始套接字發佈文件?
- 12. 在原始套接字中使用recvfrom():一般疑問
- 13. 在原始套接字中使用MAC地址的cli/C++
- 14. 如何在java中打開第2層原始套接字?
- 15. 如何使用原始套接字接收C中的ICMP請求
- 16. java中的原始套接字
- 17. python3中的原始套接字
- 18. Haskell中的原始套接字
- 19. Python中的QDISC_BYPASS(原始套接字)
- 20. TCL中的原始套接字
- 21. Rust中的原始套接字
- 22. 如何從Python中的套接字讀取原始字節?
- 23. Python原始套接字接收問題
- 24. 如何爲VLAN嗅探初始化原始套接字
- 25. libpcap在它們下面使用原始套接字嗎?
- 26. python:在OSX上使用原始套接字
- 27. 在Linux上使用C的原始套接字sendto失敗
- 28. 在原始套接字上實現協議並使用O_DIRECT
- 29. 使用Linux原始套接字與vconfig接口
- 30. 在Linux中使用原始套接字時,802.3標頭長度始終爲256
這解釋了常規套接字,但我如何構建* raw *套接字並設置其參數? – raldi 2008-10-13 21:11:16
如果你知道你在做什麼,你應該可以使用IO :: Socket構造函數的socktype和protocol參數來完成它。 – 2008-10-13 21:38:08
如果我知道我在做什麼,我就不會在這裏。 :) – raldi 2008-10-14 02:45:21