/ dev / tcp ฟังแทนฟัง nc


39

ด้วยผู้ฟัง netcat เช่น:

nc -l <port> < ~/.bashrc

ฉันสามารถคว้า. bashrc ของฉันบนเครื่องใหม่ (ไม่มีncหรือ LDAP) ด้วย:

cat < /dev/tcp/<ip>/<port> > ~/.bashrc

คำถามของฉันคือ: มีวิธีที่จะเลียนแบบความสามารถของnc -l <port>ในบรรทัดแรกของฉันด้วย / dev / tcp แทนที่จะเป็นnc?

เครื่องที่ฉันทำงานอยู่นั้นมีสภาพแวดล้อมของห้องแล็บ / แซนด์บ็อกซ์ที่แข็งมาก RHEL (ไม่มี ssh, no nc, ไม่มี LDAP, yum, ฉันไม่สามารถติดตั้งซอฟต์แวร์ใหม่และพวกเขาไม่ได้เชื่อมต่อกับอินเทอร์เน็ต)


ขาดการเขียนสคริปต์ python เพื่อให้ซ็อกเก็ตเปิดอยู่มีวิธีง่ายๆในการทำสิ่งนี้หรือไม่?
h3rrmiller

คำตอบ:


23

หากมีการติดตั้ง Perl (เนื่องจากจะอยู่ในเครื่อง RHEL):

perl -MIO::Socket::INET -ne 'BEGIN{$l=IO::Socket::INET->new(
  LocalPort=>1234,Proto=>"tcp",Listen=>5,ReuseAddr=>1);
  $l=$l->accept}print $l $_' < ~/.bashrc

จะทำงานยกเว้นว่าไฟร์วอลล์ในท้องที่จะไม่อนุญาตให้มีการเชื่อมต่อขาเข้ากับ 1234

หากติดตั้ง socat:

socat -u - tcp-listen:1234,reuseaddr < ~/.bashrc

หากติดตั้ง zsh:

zmodload zsh/net/tcp
ztcp -ld3 1234 && # start listening socket on fd 3
  ztcp -ad4 3 && # accept connection on fd 4
  ztcp -c 3 && # close the listening socket that is no longer needed
  cat < ~/.bashrc >&4 && # send the data
  ztcp -c 4 # close the communication socket to tell the other end we're finished

ztcp -c 4คำสั่งสุดท้ายไม่ควรอ่าน 3 หรือไม่? ข้อมูลที่ดีมิฉะนั้นเคล็ดลับที่ดี
dezza

@dezza ดูการแก้ไข ซ็อกเก็ตใน fd 3 ไม่ได้ถูกปิดอย่างแน่นอน (แม้ว่ามันจะเป็นเมื่อสคริปต์สิ้นสุดลง) เราจำเป็นต้องปิดซ็อกเก็ตใน fd 4 เพื่อที่ส่วนอื่น ๆ จะได้รับ EOF
Stéphane Chazelas

42

น่าเสียดายที่มันเป็นไปไม่ได้ที่จะทำอย่างไรกับการทุบตี /dev/tcp/<ip>/<port>ไฟล์เสมือนถูกนำมาใช้ในวิธีที่ทุบตีพยายามเชื่อมต่อกับฟังก์ชั่นการ<ip>:<port>ใช้ที่ระบุ connect(2)เพื่อที่จะสร้างซ็อกเก็ตการฟังมันจะต้องเรียกbind(2)ฟังก์ชั่น

คุณสามารถตรวจสอบได้โดยการดาวน์โหลดbashแหล่งที่มาและดู มันถูกนำมาใช้ในlib/sh/netopen.cไฟล์ใน_netopen4ฟังก์ชั่น (หรือ _netopen6 ซึ่งรองรับ IPv6) ฟังก์ชั่นนี้ใช้โดยฟังก์ชั่น wrapper netopenจากไฟล์เดียวกันซึ่งจะถูกใช้โดยตรงในไฟล์redir.c( redir_special_openฟังก์ชั่น) เพื่อใช้การเปลี่ยนเส้นทางเสมือนนี้

คุณต้องค้นหาแอปพลิเคชั่นอื่น ๆ ที่สามารถสร้างซ็อกเก็ตการฟังบนเครื่องของคุณ


+1 ทุบตีอนุญาตให้สร้างซ็อกเก็ตลูกค้า แต่ซ็อกเก็ตเซิร์ฟเวอร์ที่คุณสามารถใช้ NC หรือสามารถดำเนินการกับ Perl หรือ c ในความเป็นจริงกระบวนการเซิร์ฟเวอร์จะวนรอบการยอมรับการเชื่อมต่อและกระบวนการวางไข่หรือการสร้างกระทู้หรือมันสามารถยอมรับการเชื่อมต่อเดียว
Nahuel Fouilleul

2
@NahuelFouilleul: นั่นไม่ถูกต้องทั้งหมด คุณสามารถประมวลผลไคลเอนต์จำนวนมากโดยใช้เพียงหนึ่งเธรด / กระบวนการโดยใช้การเขียนโปรแกรมเครือข่าย "asynchronious" หรือ "ขับเคลื่อนด้วยเหตุการณ์" (ลอง googling สำหรับฟังก์ชั่น select () และวิธีการใช้งานในการเขียนโปรแกรมเครือข่าย) ในหลายกรณีมันเป็นวิธีที่ดีกว่า (เร็วกว่า) ในการรับลูกค้าจำนวนมาก
Krzysztof Adamski

ขอบคุณฉันไม่ได้แก้ปัญหานี้
Nahuel Fouilleul

4
นี่คือสิ่งที่ xinetd มีไว้สำหรับ มันทำหน้าที่รับฟังและวางกระบวนการ / สคริปต์ของคุณเองสำหรับการเชื่อมต่อขาเข้าใด ๆ ด้วยทุกสิ่งสามารถเป็นเซิร์ฟเวอร์ TCP / IP
Evi1M4chine

0

ไม่มีทางที่จะฟังได้เพราะการฟังไม่ได้อยู่ในท่าทุบตีอย่างที่อดัมสกี้ชี้

แต่คุณไม่จำเป็นต้องฟังไคลเอ็นต์ดังนั้นคุณไม่จำเป็นต้องใช้ netcat บนไคลเอ็นต์เพื่อถ่ายโอนไฟล์ตัวอย่างเช่น:

## To send a file to the locked down computer: 
 ## Local server where you do have netcat 
cat ~/.bashrc | nc -l -q 1 -p 8998

 ## Remote locked down computer without netcat
cat < /dev/tcp/local.server.ip.addr/8998 > latest.bashrc 

## To grab a file from the locked down computer: 
 ## First - on the local server run 
nc -l -p 8998 -q 1 > remote.bashrc < /dev/null 

 ## Then on the locked down computer run: 
cat ~/.bashrc > /dev/tcp/local.server.ip.addr/8998 0<&1 2>&1

-3

คุณสามารถทำสิ่งที่คุณพูดถาม / dev / tcp ด้วย bash:

</dev/tcp/host/port

ถ้ามันทำงานทันทีมันกำลังฟังอยู่


4
ไม่คุณไม่ได้ทดสอบสิ่งนี้อย่างแน่นอนและถ้าคุณทำคุณต้องไม่เข้าใจผลลัพธ์ ข้อเสนอแนะของคุณจะเปิดซ็อกเก็ต (ไม่ฟัง) และเปลี่ยนเส้นทางไปยังคำสั่งที่คุณใช้ พบคำตอบที่ถูกต้องแล้ว (เกือบ 6 ปีที่แล้ว ... ) ดังนั้นฉันไม่แน่ใจว่าทำไมคุณเลือกที่จะไม่ตอบคำถามนี้
h3rrmiller
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.